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


13

我最近购买了一种背光键盘,该键盘设计为使用Scroll Lock键来切换背光。我很快发现按下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是, XLookupString提供0字节:XmbLookupString提供0字节:XFilterEvent返回:False

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

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

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

tl; dr与Scroll Lock和Xorg有何关系?


解决这个问题@sherrellbc有运气吗?
皮克勒2015年

Answers:


10

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

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

xmodmap -pm

这将打印出当前修改器设置的列表。希望这些行之一不会列出任何键;通常是这样mod3。假设是这种情况,您可以使用以下命令启用滚动锁定:

xmodmap -e "add mod3 = Scroll_Lock"

您的滚动锁定LED现在应该响应滚动锁定按键。

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

但是我从来没有做过此事,因此在提供更多详细信息之前最好进行测试。:)

好。我尝试在全球范围内激活该modmap的方法不适用于我的KDE。:(但是在我的主目录中激活它似乎可以。

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

add mod3 = Scroll_Lock

最简单的方法是:

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

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


.Xmodmap配置在Ubuntu 16.04 / Unity上对我不起作用,但是永久解决方案在Pykler的答案中起作用了:)
Nebel54,18年

7

经过漫长的夜晚,找到了半途而废的解决方案,找到了永久的方式

# 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/*

这是好的,但它与gsettings变化工作只有团结起来,并xkboptions改变提到askubuntu.com/a/1067921/274298我。
peschü

2

由于Scroll Lock可以使用键盘快捷键干扰活跃时(命名F12Ctrl+ 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来激活灯。在这种情况下,请重写上面的脚本。


然后,您可以使用以下桌面环境(如Cinnamon)以自定义快捷方式启动此脚本:

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.