在一台运行 Debian squeeze 的机器上,当我使用显示管理器登录时(我尝试了 xdm、gdm 或 kdm),我的 Sawfish 键或鼠标绑定都没有任何效果。如果我以文本模式登录然后运行startx
,一切正常。
如果我尝试 fvwm,大多数绑定也不起作用,但某些鼠标绑定可以。
当我使用显示管理器登录时,我执行一个自定义会话来加载我的~/.xsession
.该文件本质上是. ~/.profile; . ~/.xinitrc
,所以我的会话在两种情况下应该完全相同(相同的环境变量、相同的程序等)。
是什么导致 Sawfish 和 Fvwm 无法识别我的绑定?使用显示管理器与运行有何不同startx
?我怎样才能让我的绑定发挥作用?
答案1
我知道 Sawfish 出了什么问题,以及如何修复它,但不知道为什么使用显示管理器会导致这种行为。
我的个人键盘布局没有 Num Lock 键,并且没有为修饰符 Mod2 分配任何键。 Sawfish 启动时会忽略分配给 Num Lock 的修饰符。如果没有为修饰符分配键,Sawfish 不会忽略它,因此key当 Mod2 打开时不会触发 的绑定(必须有 的绑定)。
Fvwm 的行为类似。还有一个额外的微妙之处,即A
修饰符列中的绑定始终有效,无论 Mod2 是否打开;只有设置了显式修饰符的绑定不起作用。
由于某种我还没有弄清楚的原因,当我使用显示管理器登录时,Num Lock 修改器被记录为打开(即使在我输入用户名和密码时它关闭,并且 Num Lock LED键盘上的按钮已关闭)。这会导致 Fvwm 和 Sawfish 接收Mod2+key键盘事件,而不是key绑定命令的事件。
由于我没有使用 Mod2,我可以通过以下方式解决此问题关闭我的 Num Lock.xsession
:
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