Fedora/KDE 上的 Scroll Lock 键不起作用

Fedora/KDE 上的 Scroll Lock 键不起作用

我有一台装有 Fedora 16 和 KDE 的计算机。它通过 KVM 切换器连接到另一台计算机的显示器,并且该切换器使用 Scroll Lock + Scroll Lock 在计算机之间切换。

问题是,出于某种原因,滚动锁定按钮在 Fedora/KDE 上不起作用。数字锁定和大写锁定可以工作。命令xset q显示它已关闭,并且xset led named "Scroll Lock"确实将其打开,但我无法“双击”。

我该如何检查按钮无法工作的原因并解决问题?我找遍了所有地方,都没发现有人遇到这个特定问题。

答案1

我曾经一度为此绞尽脑汁。显然,默认情况下,X 不会检测到 Scroll Lock,因此如果您遇到这种情况,您必须让它识别并检测该键。

  1. 打开一个终端。

  2. 跑步xmodmap-pm检查哪些 mod 密钥可用。通常至少有一个。在我的情况下,mod3 可用。因此,我将运行以下命令(您的可用 mod 密钥可能不同,因此在运行下一个命令时使用该数字)。

  3. 跑步xmodmap -e ‘添加 mod3 = Scroll_Lock’并且 Scroll Lock 键应该在 X 中开始起作用。

  4. 为了使其永久生效,您可以在窗口管理器/环境中添加启动项,或者使用其他方法,例如将其放入 .xinitrc 文件中,或者在 xinitrc.d 中创建一个文件来执行此操作(如果这些仍然适用于您的 Linux 发行版,如果不适用,请使用其他方法)。

更新:我刚刚注意到,在进行一些更新后,我之前使用启动项调用 xmodmap 的方法不再起作用。我使用的是启动应用程序首选项的附加功能。由于现在这样做的方式已添加到此命令被破坏的其他方式中,因此我为 Fedora 21 及更高版本添加了以下内容。它也应该适用于许多其他发行版,但 YMMV。

为了使上述操作永久生效,请执行以下操作:

  1. 如果从上面获得的可用 mod 编号与下面的 mod3 不同,请使用它,或者通过运行以下命令再次检查哪个可用:

xmodmap

为了本指南的目的,我们假设它提供了 mod3 作为可用插槽。

  1. 在 /usr/local/bin 目录中创建一个名为 scrlkon 的脚本。

sudo touch /usr/local/bin/scrlkon

  1. 打开刚刚创建的文件(如果愿意,您可以使用您喜欢的文本编辑器代替 nano)。

sudo nano /usr/local/bin/scrlkon

  1. 将以下文本放入文件中:

#!/usr/bin/sh

sleep 4

exec xmodmap -e 'add mod3 = Scroll_Lock'

exit

  1. 保存文件并使其可执行:

sudo chmod +x /usr/local/bin/scrlkon

  1. 从启动项调用脚本。

你可以随意命名这个新的启动项,只要它调用scrlkon

  1. 如果您注销并再次登录时它没有立即启动,请重新启动。

注意:如果需要,您可能希望将睡眠次数调整为 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

相关内容