システム全体のキーバインディングがどこから来ているかを確認して削除するにはどうすればよいですか?

システム全体のキーバインディングがどこから来ているかを確認して削除するにはどうすればよいですか?

キーボードレイアウトをポーランド語に切り替えました。ここで、Alt_Rはさまざまなビラテン文字を生成するために使用されます。そのうちのいくつかは動作し、一部は動作しません。

  • Alt_R-l期待どおりに「ł」を生成します。
  • Alt_R-c「ć」を生成する必要がありますが、Chromiumを起動します。
  • 他の複数のAlt_Rキーの組み合わせも、さまざまなプログラムを起動したり、現在のウィンドウを少し下に移動したり、何もしないことがあります。

この機能はどこから来たのですか?私の設定 - >キーボードダイアログボックスまたは〜/ .Xmodmapには何もありません。システム全体のキーボードショートカットやその他のキーボード修正を定義できる場所はどこですか?完全なリストがありますか?

Alt_R-cより良い点は、どのアプリケーション/システムがキーの組み合わせに反応するのかを調べて、キーバインディングが保存される場所を知る方法がありますか?

これはXubuntu 20.04.3にあります。

答え1

コアシンボルがあります。XF86LogGrabInfoこのボタンを押すと、Xサーバーはすべての情報を印刷します。印象ログファイル(通常/var/log/Xorg.$DISPLAY.log)にあります。インストールした場合は、xdotool次のコマンドでキーを起動できます。

xdotool key XF86LogGrabInfo

ここでは、犯人X11クライアントを識別できます。たとえば、どのX11クライアントが「Space」キーを誤って使用したかを確認するには、まずspaceキーシムにバインドされたキーコードを取得します。

$ xkbcomp $DISPLAY - | grep SPCE
    <SPCE> = 65;
    key <SPCE> {         [           space ] };

xev(+pressを使用することもできますSpace)次のように検索しますXorg.$DISPLAY.log

$ awk '/registered grabs of client/{c=$0}/detail 65/{if(c)print c; c=""; print}' /var/log/Xorg.0.log
[452727.209]   Printing all registered grabs of client pid 32055 openbox --config-file /home/pi/.config/openbox/lxde-pi-rc.xml
[452727.220]     detail 65 (mask 0), modifiersDetail 8 (mask 0)
[452727.220]     detail 65 (mask 0), modifiersDetail 24 (mask 0)
[452727.220]     detail 65 (mask 0), modifiersDetail 10 (mask 0)
[452727.220]     detail 65 (mask 0), modifiersDetail 26 (mask 0)
[452727.241]     detail 65 (mask 0), modifiersDetail 12 (mask 0)
[452727.241]     detail 65 (mask 0), modifiersDetail 28 (mask 0)
[452727.241]     detail 65 (mask 0), modifiersDetail 14 (mask 0)
[452727.241]     detail 65 (mask 0), modifiersDetail 30 (mask 0)

modifiersDetail 8などMod1MaskによってAlt

それでキーの組み合わせをopenbox盗むのです。Alt-Space


クライアントのpidとコマンドラインが常に正しいとは限りません。プロセスのpidとコマンドライン。接続済みXorg Unixドメインソケットに同時にフォークし、サブプロセスがソケットファイル記述子を継承する場合、ソケットはもう存在しない可能性があります。 (これはSO_PEERCRED「認証」を無邪気に誤用する一般的な問題です。話が長くなります;-) )

関連情報