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

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

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

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

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

KeyPress事件,序列34,合成NO,窗口0x2c00001,根0x2df,子w 0x0,时间2609824,(410,0),根:(1724,142),状态0x0,键码78(keysym 0xff14,Scroll_Lock),same_screen YES, XLookupString 给出 0 个字节: XmbLookupString 给出 0 个字节: XFilterEvent 返回: False

KeyRelease事件,序列号37,合成NO,窗口0x2c00001,根0x2df,subw 0x0,时间2609912,(410,0),根:(1724,142),状态0x0,键码78(keysym 0xff14,Scroll_Lock),same_screen YES, XLookupString 给出 0 个字节:

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

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

太长了;博士Scroll Lock 和 Xorg 有什么关系?

答案1

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

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

xmodmap -pm

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

xmodmap -e "add mod3 = Scroll_Lock"

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

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

但我以前从未这样做过,所以我最好在提供进一步的细节之前进行测试。 :)

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

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

add mod3 = Scroll_Lock

最简单的方法是:

cd ~
echo >.Xmodmap "add mod3 = Scroll_Lock"

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

答案2

找到了永久的方法经过一个漫长的夜晚,吃了很多半生不熟的解决方案。

# backup your symbols file
sudo cp /usr/share/X11/xkb/symbols/us{,.distribution} 

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

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

    include "level3(ralt_switch)" <==<< before this line
};

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

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

sudo rm -f /var/lib/xkb/*

答案3

由于Scroll Lock激活时可能会干扰您的键盘快捷键(名为F12, Ctrl+Space不会按预期工作),我决定将Scroll Lock按键与手动启动相匹配xset,根据之前的状态切换 LED 状态。

我创建了一个名为的可执行脚本toggle_keyb_led.sh

xset q | awk '/LED/{ if ($10 ~ "00000000") print "led"; else print "-led" }' | xargs xset

这会解析 的输出xset q,并将该行与 相匹配LED mask

注1:如果不适合您,请验证xset -led; xset q | grep 'LED'当前掩码值是多少。

笔记2:部分用户需要跑步xset led 3才能亮灯。在这种情况下,请重写上面的脚本。


然后,您可以使用桌面环境作为自定义快捷方式启动此脚本,例如(这里使用的是肉桂):

在此输入图像描述

相关内容