我有一台装有 Fedora 16 和 KDE 的计算机。它通过 KVM 切换器连接到另一台计算机的显示器,并且该切换器使用 Scroll Lock + Scroll Lock 在计算机之间切换。
问题是,出于某种原因,滚动锁定按钮在 Fedora/KDE 上不起作用。数字锁定和大写锁定可以工作。命令xset q
显示它已关闭,并且xset led named "Scroll Lock"
确实将其打开,但我无法“双击”。
我该如何检查按钮无法工作的原因并解决问题?我找遍了所有地方,都没发现有人遇到这个特定问题。
答案1
我曾经一度为此绞尽脑汁。显然,默认情况下,X 不会检测到 Scroll Lock,因此如果您遇到这种情况,您必须让它识别并检测该键。
打开一个终端。
跑步xmodmap-pm检查哪些 mod 密钥可用。通常至少有一个。在我的情况下,mod3 可用。因此,我将运行以下命令(您的可用 mod 密钥可能不同,因此在运行下一个命令时使用该数字)。
跑步xmodmap -e ‘添加 mod3 = Scroll_Lock’并且 Scroll Lock 键应该在 X 中开始起作用。
为了使其永久生效,您可以在窗口管理器/环境中添加启动项,或者使用其他方法,例如将其放入 .xinitrc 文件中,或者在 xinitrc.d 中创建一个文件来执行此操作(如果这些仍然适用于您的 Linux 发行版,如果不适用,请使用其他方法)。
更新:我刚刚注意到,在进行一些更新后,我之前使用启动项调用 xmodmap 的方法不再起作用。我使用的是启动应用程序首选项的附加功能。由于现在这样做的方式已添加到此命令被破坏的其他方式中,因此我为 Fedora 21 及更高版本添加了以下内容。它也应该适用于许多其他发行版,但 YMMV。
为了使上述操作永久生效,请执行以下操作:
- 如果从上面获得的可用 mod 编号与下面的 mod3 不同,请使用它,或者通过运行以下命令再次检查哪个可用:
xmodmap
为了本指南的目的,我们假设它提供了 mod3 作为可用插槽。
- 在 /usr/local/bin 目录中创建一个名为 scrlkon 的脚本。
sudo touch /usr/local/bin/scrlkon
- 打开刚刚创建的文件(如果愿意,您可以使用您喜欢的文本编辑器代替 nano)。
sudo nano /usr/local/bin/scrlkon
- 将以下文本放入文件中:
#!/usr/bin/sh
sleep 4
exec xmodmap -e 'add mod3 = Scroll_Lock'
exit
- 保存文件并使其可执行:
sudo chmod +x /usr/local/bin/scrlkon
- 从启动项调用脚本。
你可以随意命名这个新的启动项,只要它调用scrlkon
- 如果您注销并再次登录时它没有立即启动,请重新启动。
注意:如果需要,您可能希望将睡眠次数调整为 4 以上。调用睡眠函数是必要的,以抵消关闭 mod 键或在登录时禁用 xmodmap 命令的任何原因。4 是一个不错的数字,因为它在登录后不需要那么长时间就可以工作。但是如果它仍然被 Fedora 环境中的某些东西禁用(出于某种原因,这在 mate-desktop 中尤其糟糕),只需增加睡眠中的数字,直到您始终启用该键。这样就可以了。
除了上述方法以外,还有一种替代方法(如果您不想编写脚本或添加其他文件),即在步骤 2-6 中的启动程序项的命令字段中替换以下内容:
sh -c "sleep 15; exec xmodmap -e 'add mod3 = Scroll_Lock'"
这似乎也有效。只需确保单引号和双引号是直引号而不是弯引号即可。
答案2
我有一个类似的 KVM 切换器,并且由于我不希望在后台运行某些程序xmodmap
定期进行探测并且尚未修改 X 键盘映射,因此我的解决方案是这个脚本:
#!/bin/bash
# Toggle the KVM switch programmatically by toggling the Scroll Lock LED
# Based on https://askubuntu.com/a/546989/23552
SLEEP=0.5
LEDNAME="Scroll Lock"
echo "Switching..."
xset led named "$LEDNAME"
sleep $SLEEP
xset -led named "$LEDNAME"
sleep $SLEEP
xset led named "$LEDNAME"
sleep $SLEEP
xset -led named "$LEDNAME"
(是的,从技术上讲,这是四次点击按键。我不确定我的延迟是否太短,但我发现双击不可靠,而这个有效,所以......现在足够好了。)
然后,为了从我的日常驱动程序切换到我的用二手零件制造的“没有后台任务来卡顿”的游戏机,我只需按 F12 键拉下 Yakuake 并输入win7
。