为什么在 Cinnamon/Linux/Xorg 中禁用 Scroll Lock 键?

she*_*lbc 16 arch-linux xorg cinnamon

我最近购买了一个背光键盘,它的设计使得使用 Scroll Lock 键来切换背光。我很快发现 Cinnamon 在按下 Scroll Lock 键时没有正确响应。最初,我认为键盘背光是 DOA,因为其他一切都是开箱即用的。重新启动后,我发现在启动 Xorg 之前,我能够使用 Scroll Lock 键成功切换背光。然后,在启动 Xorg(以及随之而来的 cinnamon_session)后,这个功能再次停止工作。

为了在启动 Xorg 后让背光工作,我被迫发出一个:xset led named "Scroll Lock"来启用和禁用此功能。

经过一番研究,我发现了一个名为的程序xev,它在启动后将关键事件信息转储到终端。按下 Scroll Lock 键后,终端将填充以下信息:

KeyPress 事件,serial 34,合成 NO,window 0x2c00001,root 0x2df,subw 0x0,time 2609824,(410,0),root:(1724,142),state 0x0,keycode 78 (keysym 0xff14,_screen_YES,same) XLookupString 给出 0 个字节:XmbLookupString 给出 0 个字节:XFilterEvent 返回:False

KeyRelease 事件,serial 37,合成 NO,window 0x2c00001,root 0x2df,subw 0x0,时间 2609912,(410,0),root:(1724,142),state 0x0,keycode 78(keysym 0xff14,same_screenLock,YES) XLookupString 给出 0 个字节:

所以我知道关键事件正在发送到内核。

此外,有趣的是,我在终端中(仍然在启动 Xorg 或 Cinnamon 之前)和使用 Scroll Lock 时观察到了奇怪的行为。也就是说,此时我的背光按预期切换,但是当启用 Scroll Lock 时,我输入的任何内容都不会写入屏幕。禁用 Scroll Lock 后,我写的所有内容都立即转储到终端,就好像它以前被缓冲一样。

tl;dr Scroll Lock 和 Xorg 有什么关系?

PM *_*ing 12

我不熟悉 Cinnamon,但应该可以启用您的 Scroll Lock 键。

首先,我们需要查看您是否有空闲的键盘修改器插槽。跑:

xmodmap -pm
Run Code Online (Sandbox Code Playgroud)

这将打印您当前修改器设置的列表。希望其中一行不会列出任何键;一般会这样mod3。假设是这种情况,您可以使用以下命令启用 Scroll Lock:

xmodmap -e "add mod3 = Scroll_Lock"
Run Code Online (Sandbox Code Playgroud)

您的 Scroll Lock LED 现在应该响应 Scroll Lock 按键。

如果可行,您可能希望 X 在启动时自动执行此操作。有多种方法可以做到这一点:它可以在每个用户的基础上完成,但对于这样的事情,我认为将其设置为全局是有意义的。

但我自己之前从未这样做过,所以在提供更多细节之前我最好先测试一下。:)

好的。我尝试全局激活该 modmap 的方法在 KDE 上对我不起作用。:( 但是在我的主目录中激活它似乎可以正常工作。

.Xmodmap在您的主目录中创建一个包含以下行的文件:

add mod3 = Scroll_Lock
Run Code Online (Sandbox Code Playgroud)

最简单的方法是:

cd ~
echo >.Xmodmap "add mod3 = Scroll_Lock"
Run Code Online (Sandbox Code Playgroud)

现在重新启动 X(注销并再次登录)。希望您的 Scroll Lock 键可以正常工作。如果没有,请告诉我。


Pyk*_*ler 8

经过漫长的夜晚,找到了许多半成品解决方案的永久方式

# backup your symbols file
sudo cp /usr/share/X11/xkb/symbols/us{,.distribution} 
Run Code Online (Sandbox Code Playgroud)

在该xkb_symbols "basic" {部分中添加以下行。如果第二行不存在,请不要担心,它仅适用于某些语言,而在我的系统中不适用于我们。

...
    modifier_map Mod3   { Scroll_Lock }; <==<< Add this line

    include "level3(ralt_switch)" <==<< before this line
};
Run Code Online (Sandbox Code Playgroud)

如果您在语言之间切换,您可能必须在其他布局中执行相同操作

此外,还有一个缓存,用于存放 xkb 布局。您应该在重新启动 X 服务器之前清除它以检查新的键盘符号文件。

sudo rm -f /var/lib/xkb/*
Run Code Online (Sandbox Code Playgroud)