如何让 Debian 10(Buster)自动启用 Scroll Lock?

如何让 Debian 10(Buster)自动启用 Scroll Lock?

我有一个键盘,当打开 Scroll Lock 时它会亮起,但是我的 Debian 10 虚拟机(通过 VirtualBox)不会确认状态,SCROLL_LOCK除非我运行以下命令:

xmodmap -e 'add mod3 = Scroll_Lock'

每次重新启动时都必须再次执行该操作才能使密钥SCROLL_LOCK执行任何操作。

我尝试过以两种不同的方式设置自动脚本,如Debian:如何在启动时运行脚本而不必编写 30 行 shell 脚本?但它不起作用。我猜这些方法不起作用是因为它们以 root 身份运行,而当我尝试手动xmodmap以 root 身份运行时,我收到以下错误:

xmodmap: unable to open display ''

它仅当我以非 root 用户身份运行它时才有效。

我刚刚发现,如果我把xmodmap命令输入进去~/.bashrcSCROLL_LOCK当我登录到终端时会自动启用,这很好,但更美好如果我登录桌面(即 Xfce)时会发生这种情况,并且最美好的如果它可以在桌面登录提示出现时发生。

附加信息:

我的桌面管理器是lightdm-xsession

答案1

这里的问题是,您提到的所有情况都有些不同。

正如您所称的“桌面登录提示”由所谓的桌面管理器 (DM) 呈现,其任务是对用户进行身份验证,并在成功后生成 X.org 实例并在其上运行该用户的 X 会话,而 Xfce 仅在该阶段启动。

调用并不是一个明智的想法,因为它假设它能够找到活动的 X 会话(通常通过查找在其环境中命名的变量,该变量从其父进程继承(它从父进程继承,并一直追溯到负责启动 X 会话xmodmap的进程,该进程实际上设置并导出该变量)。因此,如果您在普通的虚拟终端上运行 - 在 X 中按下+ +时看到的文本控制台- 调用会向您发出警告,因为它无法找到运行 X 会话的 X 服务器。~/.bashrcxmodmapDISPLAYbashCtrlAltF1xmodmap

因此基本上您的系统在启动时大致有几个执行的“阶段”(或“上下文”):

  1. 引导加载程序;
  2. 早期启动/initramfs;
  3. 系统(挂载真正的根 FS 之后);DM 在此阶段生成;
  4. 用户的 X 会话或用户在 VT 上的非图形会话的设置。

另外要注意的一点是,在 PC 上运行的基于 Linux 的系统总是让用户通过虚拟终端 (VT) 与其交互,并且 X 服务器也在 VT 上运行并与其绑定(这就是为什么您通常能够在 X 中切换到另一个非图形化的 VT)。

因此,我们可以尝试用这种方式来解决这个问题:

  1. 查看在所有可用的 VT 上将滚动锁定设置为“on”是否有效 - 也就是说,当 DM 在 VT 上启动然后生成 X 服务器时,它们都继承 scoll 锁定设置。
  2. 如果这不起作用,我们可以查看您的特定 DM 具有哪种配置(您没有告诉我们您使用的是哪种 DM)。它可能具有运行外部命令的能力,也可能具有直接键盘设置。
  3. 如果所有这些都失败了,我们至少可以看到如何让 Xfce 在启动用户会话时运行外部命令。

因此,尽管我无法立即回答您的问题,但我会从第 3 步着手解决它:

  • 建议setleds在系统启动时设置 LED。
  • 解释了如何在启动时设置 NumLock setleds,因此可以轻松地适用于 ScrollLock 的情况。

相关内容