そろそろ VMware はやめたいのですが、細かい要件まで含めるとすべての条件を満たす代替手段をまだ見つけられていないためだらだらと使い続けているところです。(とはいえ当の VMware 自体もクリップボード共有まわりが壊れてきていて要件は満たさなくなってきているんですが)
VMware Workstation Pro 26H1(ホスト: Windows 11)のゲストとして動かしている Fedora KDE Plasma で、キーボードの Lang1/Lang2 キーがまったく反応しない問題に遭遇しました。同じホスト上の別ゲスト(Fedora Cinnamon)では普通に使えていたので、しばらく首をひねることに。備忘録として残しておきます。
wev を実行しても、Lang1/Lang2 を押したときのイベントが何も表示されないキーイベントが「カーネル → コンポジタ → アプリ」のどの層で消えているかを調べるため、まず sudo evtest を実行しました。
Event: time 1784344989.874245, type 4 (EV_MSC), code 4 (MSC_SCAN), value 72
Event: time 1784344989.874245, -------------- SYN_REPORT ------------
Event: time 1784344989.974395, type 4 (EV_MSC), code 4 (MSC_SCAN), value 72
Event: time 1784344989.974395, -------------- SYN_REPORT ------------
Event: time 1784344991.342446, type 4 (EV_MSC), code 4 (MSC_SCAN), value 71
Event: time 1784344991.342446, -------------- SYN_REPORT ------------
Event: time 1784344991.495302, type 4 (EV_MSC), code 4 (MSC_SCAN), value 71
Event: time 1784344991.495302, -------------- SYN_REPORT ------------
スキャンコード(0x72 / 0x71)は届いているのに、KEY_* のキーイベントが発生していません。sudo dmesg で確認すると答えがそのまま書いてありました。
[ 987.156482] atkbd serio0: Unknown key pressed (translated set 2, code 0x72 on isa0060/serio0).
[ 987.156488] atkbd serio0: Use 'setkeycodes 72 <keycode>' to make it known.
[ 987.256630] atkbd serio0: Unknown key released (translated set 2, code 0x72 on isa0060/serio0).
[ 987.256636] atkbd serio0: Use 'setkeycodes 72 <keycode>' to make it known.
[ 988.624645] atkbd serio0: Unknown key pressed (translated set 2, code 0x71 on isa0060/serio0).
[ 988.624651] atkbd serio0: Use 'setkeycodes 71 <keycode>' to make it known.
[ 988.777495] atkbd serio0: Unknown key released (translated set 2, code 0x71 on isa0060/serio0).
[ 988.777501] atkbd serio0: Use 'setkeycodes 71 <keycode>' to make it known.
つまり、VMware の仮想キーボードはスキャンコードをちゃんとゲストに送っているものの、Linux の atkbd ドライバのデフォルトマップに 0x72 / 0x71 が含まれておらず、キーコードへの変換で捨てられていたのでした。
sudo setkeycodes 72 122 # 0x72 → KEY_HANGEUL (Lang1)
sudo setkeycodes 71 123 # 0x71 → KEY_HANJA (Lang2)
これで evtest に KEY_HANGEUL / KEY_HANJA が出るようになり、wev にも Hangul / Hangul_Hanja のキーシムが届くようになりました。ただし setkeycodes だと再起動で消えます。
/etc/udev/hwdb.d/90-vmware-lang-keys.hwdb を作成します。
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnVMware*:pn*:*
KEYBOARD_KEY_72=hangeul
KEYBOARD_KEY_71=hanja
2,3行目の先頭半角スペースは必須なので注意。
作成したら反映します。
sudo systemd-hwdb update
sudo udevadm trigger --sysname-match="event*"
これで再起動後も Lang1/Lang2 が Hangul / Hangul_Hanja として認識されるようになりました。あとは IBus-Anthy の設定で IME のオン/オフに割り当てれば完成です。
evtest と dmesg で「どの層で消えているか」を切り分けるUnknown key pressed が出ていたら udev hwdb(KEYBOARD_KEY_<scancode>=<keycode名>)で解決できる/usr/include/linux/input-event-codes.h の KEY_* から KEY_ を除いた小文字。JIS Mac 風に「かな/英数」にしたければ katakanahiragana / muhenkan なども指定できる
最近のコメント
たかたむ
はじめまして。初リアルフォース(R3ですが)で,同…
nokiyameego
ZFS poolのデバイスラベル破損で悩んていたと…
名前
しゅごい
Jane Doe
FYI Avoid Annoying Unexpe…
Jane Doe
ご存じとは思いますが、whileには、”~の間”と…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…