Ubuntu 13.10がインストールされたLenovo IdeaPad Yoga 13を持っています。デバイスのキーボードに「Toggle TouchPad」ボタン(F5)。キーボードの F* ボタンが逆になっています F5、押す必要があります Fn + F5、および F5 実際にはトグルキーです)。
このボタンは、実際には/dev/input/event3
にあるキーボード(特定のデバイスのようなタッチパッドではなく)によって読み取られることがわかりました。 Sudo input-events 3
を使用すると、ボタンがスキャンコード190を送信することがわかりました。
Sudo lsinput
の出力:
/dev/input/event3
bustype : BUS_I8042
vendor : 0x1
product : 0x1
version : 43907
name : "AT Translated Set 2 keyboard"
phys : "isa0060/serio0/input0"
bits ev : EV_SYN EV_KEY EV_MSC EV_LED EV_REP
Sudo input-events 3
の出力:
23:13:03.849392: EV_MSC MSC_SCAN 190
23:13:03.849392: EV_SYN code=0 value=0
23:13:03.855413: EV_MSC MSC_SCAN 190
23:13:03.855413: EV_SYN code=0 value=0
input-events
を除いて、他のプログラム(xev
など)はそれを読み取ることができないようです。このボタンをマップして私のラップトップのタッチパッドを切り替える方法はありますか?もしそうなら、どうすればできますか?
結局のところ、カーネルはそれを拾い上げましたが、認識されないと不平を言い続けました。
この問題が発生している他の人、またはOSによって読み取られないキーをマップする場合は、以下をお読みください。
ターミナルを開いてdmesg | grep -A 1 -i setkeycodes
を実行します。これにより、次のような複数のエントリが得られます。
[ 9.307463] atkbd serio0: Unknown key pressed (translated set 2, code 0xbe on isa0060/serio0).
[ 9.307476] atkbd serio0: Use 'setkeycodes e03e <keycode>' to make it known.
私たちが興味を持っているのは、「setkeycodes」の後の16進値です。この場合、これはe03e
です。これらが複数ある場合は、tail -f /var/log/kern.log
を実行できます。それが終わったら、探しているボタンをタップできます。これにより、上記と同じ行が表示されます。ここでも、16進数の値だけが必要です。これを書き留めてください。
次に、xmodmap -pke | less
を実行して、適切なマッピングを見つけます。私の場合、これをマップしてタッチパッドを切り替える必要がありました。つまり、次の行に興味がありました。
keycode 199 = XF86TouchpadToggle NoSymbol XF86TouchpadToggle
興味のあるものが見つからない場合は、@ Gillesの回答も読んでください。カスタムマッピングも定義できるため、次に進んでください(カーネルがそれを読んだ場合は、xorg.confに追加する必要はありません。 d)
ここで、次のコマンドを実行しました:Sudo setkeycodes [hexadecimal] [keycode]
、つまり私の場合はsetkeycodes e03e 199
になりました。
これで、次の行を使用して、それが機能したかどうか、および/または正しいマッピングがあるかどうかをテストできます。
xev | grep -A2 --line-buffered '^KeyRelease' | sed -n '/keycode /s/^.*keycode \([0-9]*\).* (.*, \(.*\)).*$/\1 \2/p'
このコマンドを実行するときは、新しく開いたウィンドウ(xev
)に焦点を当て、コンソール出力を確認する必要があります。私の場合は次のように読みます:
207 NoSymbol
キーコード199
をリクエストしたため、これは明らかに間違っていたため、XF86TouchpadToggle
にマッピングされました。 xmodmap -pke
をもう一度確認したところ、keycode 207
が実際にNoSymbol
にマッピングされていることに気付き、オフセットの差が8であることに気付いたので、setkeycodes
を試しましたコマンドを再度実行しますが、キーはkeycode 191
にマップされます。
Sudo setkeycodes e03e 191
これは完全に機能しました。
編集-起動時に作業するために私が提供したソリューションはしていません。明日これを理解し、この答えを更新します。今のところ、起動時に手動で実行できると思います。
外観から見ると、デバイスはキーボード(「コア」キーボードとは別のソフトウェアとして認識されます)ですが、Xサーバーはそれをリッスンしていません。
/etc/X11/xorg.conf.d
の下に入力セクションを追加してみてください。つまり、ディレクトリ/etc/X11/xorg.conf.d
が存在しない場合は作成し、そのディレクトリにextra-keyboard-buttons
を含むファイルを作成します。
Section "InputClass"
Identifier "extra-keyboard-buttons"
Driver "kbd"
MatchProduct "AT Translated Set 2 keyboard"
EndSection
MatchProduct
行についてはわかりません。機能しない場合は、 MatchXXX
ディレクティブ を試してみてください。
このファイルが正しく設定されると、Xサーバーを起動すると、このキーボードからのイベントが処理され、xev
などにイベントが表示されます。キーコードに注意してください(この場合、X11キーコードがハードウェアキーコードと同じかどうかはわかりません)。それにキーシムを関連付けます。あなたのホームディレクトリにある.Xmodmap
と呼ばれるファイルを介してそれを行うことができます
keycode 190 = XF86_Launch5
これらのキーを使用して キーボードショートカットを定義 できるようになりました。
タッチパッドを切り替えるには、コマンド xinput
を使用します。 xinput list
を実行して、使用可能な入力デバイスを確認し、タッチパッドの名前をメモします(以下ではTouchpad
と呼びます)。 xinput list-props Touchpad
を実行して、そのプロパティを一覧表示します。それらの1つは「デバイス有効」と呼ばれ、その隣に番号が付いています(例:135)。次のスクリプトは、タッチパッドを切り替えます。
#!/bin/sh
device_name='Touchpad'
property=135
flipped_state=$(xinput list-props "$device_name" |
awk "/\\($property\\)/ {print 1 - \$NF}")
xinput set-prop "$device_name" "$property" "$flipped_state"
これをファイル~/bin/toggle-touchpad
に保存し、実行可能にします(chmod +x ~/bin/toggle-touchpad
)。これをキーにバインドするには、 xbindkeys をインストールし、~/.xbindkeysrc
に次の行を挿入してスクリプトを実行するように設定します。
"toggle-touchpad"
XF86_Launch5