🏬

GNOME でキーボードの1が入力できないのは gTile のせいだった

2022/12/04に公開

「1」だけがなぜか入力できない問題

いつのまにか「1」だけが入力できない状態に陥っていた。
「1」を押すと、入力が発生するのではなくてウィンドウのサイズが小さくなるという謎の動作をしていた。
理由もわからず不便なままたまに調べてはよくわからずを繰り返していたが、原因が判明したので残します。

環境

Arch Linux
GNOME 43.1
X11
gTile 51

GNOME shell extension の gTile という window manager の設定が問題だった

gTile という widows manager を試しに使ってみていたのですが、「Global resize presets(works without gTile activated)」を有効にしていたことで、グローバルにキー入力をキャプチャされてしまっていた模様。
そのため、1という入力が gTile のコマンド発動になってしまっていたのかな?
自分はそもそも gTile 自体をもう使わなくなっていたので gTile を無効にして回避したが、使い続けたい場合はこれ以外の設定をどうにかする必要があるとは思いますが、そこまでは調べていません。

gTile/gTile: A window tiling extension for Gnome. This is the new official home of the vibou.gTile extension.

キーボードがおかしいときの調査方法

今回の原因はすでに記載した通りだが、このように入力周りで不具合があったときにどのようにデバッグするかのメモ。

困ったときの Arch wiki ということでこのページを読みます。
キーボード入力 - ArchWiki

  • scancode が設定されているか
  • keycord が設定されているか

今回は X 環境で xev を使い keycord を確認したときに、1を入力したときに他とは違う結果が得られました。
自分には意味はわからないのですが、X側でなにか問題が起きているということはわかりました。

2を押したとき

KeyPress event, serial 37, synthetic NO, window 0x2800001,
root 0x7a8, subw 0x0, time 4134414, (484,455), root:(534,574),
state 0x0, keycode 11 (keysym 0x32, 2), same_screen YES,
XLookupString gives 1 bytes: (32) "2"
XmbLookupString gives 1 bytes: (32) "2"
XFilterEvent returns: False
  
KeyRelease event, serial 37, synthetic NO, window 0x2800001,
root 0x7a8, subw 0x0, time 4134524, (484,455), root:(534,574),
state 0x0, keycode 11 (keysym 0x32, 2), same_screen YES,
XLookupString gives 1 bytes: (32) "2"
XFilterEvent returns: False

1を押したとき

FocusOut event, serial 37, synthetic NO, window 0x2800001,
mode NotifyGrab, detail NotifyAncestor
  
FocusIn event, serial 37, synthetic NO, window 0x2800001,
mode NotifyUngrab, detail NotifyAncestor
  
KeymapNotify event, serial 37, synthetic NO, window 0x0,
    keys:  2   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   
           0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0  

Wiki にはこのような記載があります。

キーを押してもターミナルに何も表示されない場合、キーにスキャンコードが設定されていないかスキャンコードがキーコードにマッピングされていない、あるいは他のプロセスがキーの押下をキャプチャしています。

他のプロセスがキャプチャしているかどうかを雑に調べるには、余計のものが少ないキレイな X 環境を使ってみるのがまずは簡単なようです。
別ユーザーを作って同じ動作をしてみたところ(クリーンなX環境を立ち上げる良い方法は他にあると思うがうまくいかなかったので)、1が正しく入力されました。
誰かが悪さをしている、、、👀
悪そうなやつを止めては動作確認をしていたところ、そういえば window manager 試していたな(全然使っていないけど)と gTile のアイコンがメニューバーにあるのが目にとまり、特定することができましたとさ。

もっといい方法があればぜひ知りたいです🙏

Discussion