web-dev-qa-db-ja.com

ディスプレイマネージャーでログインすると、Sawfishとfvwmのバインディングが機能しない

Debian squeezeを実行している1台のマシンで、ディスプレイマネージャーでログインすると(xdm、gdm、またはkdmを試しました)、Sawfishのキーまたはマウスのバインディングは効果がありません。テキストモードでログインしてからstartxを実行すると、すべて正常に機能します。

Fvwmを試してみると、ほとんどのバインディングも機能しませんが、一部のマウスバインディングは機能します。

ディスプレイマネージャでログインすると、~/.xsessionをロードするカスタムセッションを実行します。そのファイルは本質的に. ~/.profile; . ~/.xinitrcであるため、私のセッションは両方の場合でまったく同じである必要があります(同じ環境変数、同じプログラムなど)。

SawfishとFvwmが私のバインディングを認識しない原因は何ですか?ディスプレイマネージャの使用は、startxの実行とどのように異なりますか?バインディングを機能させるにはどうすればよいですか?

私はSawfishの病気とその修正方法を知っていますが、ディスプレイマネージャーを使用するとこの動作が発生する理由はわかりません。

私のパーソナルキーボードレイアウトにはNumLockキーがなく、修飾子Mod2にキーが割り当てられていません。 Sawfishは、起動時にNumLockに割り当てられた修飾子を無視します。モディファイアにキーが割り当てられていない場合、Sawfishはそれを無視しないため、 key Mod2がオンの場合はトリガーされません(のバインディングが必要になります)。

Fvwmも同様に動作します。 Mod2がオンであるかどうかに関係なく、修飾子列のAとのバインディングが常に機能するという追加の微妙な点があります。動作しないのは、明示的な修飾子が設定されたバインディングのみです。

なんらかの理由で、ディスプレイマネージャーでログインすると、Num Lockモディファイアがオンとして記録されます(ユーザー名とパスワードを入力している間はオフになっていますが、Num Lock LEDキーボードのオフ)。これにより、FvwmとSawfishが受信します Mod2+key ではなくキーボードイベント key コマンドがバインドされています。

Mod2を使用していないので、これを修正するには .xsessionでNum Lockをオフにします

python -c 'from ctypes import *
X11 = cdll.LoadLibrary("libX11.so.6")
display = X11.XOpenDisplay(None)
X11.XkbLockModifiers(display, c_uint(0x0100), c_uint(16), c_uint(0))
X11.XCloseDisplay(display)'

またはMod2を完全に無効にします

xkbset nullify mod2