我有一个键盘,当打开 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
命令输入进去~/.bashrc
,SCROLL_LOCK
当我登录到终端时会自动启用,这很好,但更美好如果我登录桌面(即 Xfce)时会发生这种情况,并且最美好的如果它可以在桌面登录提示出现时发生。
附加信息:
我的桌面管理器是lightdm-xsession。
答案1
这里的问题是,您提到的所有情况都有些不同。
正如您所称的“桌面登录提示”由所谓的桌面管理器 (DM) 呈现,其任务是对用户进行身份验证,并在成功后生成 X.org 实例并在其上运行该用户的 X 会话,而 Xfce 仅在该阶段启动。
调用并不是一个明智的想法,因为它假设它能够找到活动的 X 会话(通常通过查找在其环境中命名的变量,该变量从其父进程继承(它从父进程继承,并一直追溯到负责启动 X 会话xmodmap
的进程,该进程实际上设置并导出该变量)。因此,如果您在普通的虚拟终端上运行 - 在 X 中按下+ +时看到的文本控制台- 调用会向您发出警告,因为它无法找到运行 X 会话的 X 服务器。~/.bashrc
xmodmap
DISPLAY
bash
CtrlAltF1xmodmap
因此基本上您的系统在启动时大致有几个执行的“阶段”(或“上下文”):
- 引导加载程序;
- 早期启动/initramfs;
- 系统(挂载真正的根 FS 之后);DM 在此阶段生成;
- 用户的 X 会话或用户在 VT 上的非图形会话的设置。
另外要注意的一点是,在 PC 上运行的基于 Linux 的系统总是让用户通过虚拟终端 (VT) 与其交互,并且 X 服务器也在 VT 上运行并与其绑定(这就是为什么您通常能够在 X 中切换到另一个非图形化的 VT)。
因此,我们可以尝试用这种方式来解决这个问题:
- 查看在所有可用的 VT 上将滚动锁定设置为“on”是否有效 - 也就是说,当 DM 在 VT 上启动然后生成 X 服务器时,它们都继承 scoll 锁定设置。
- 如果这不起作用,我们可以查看您的特定 DM 具有哪种配置(您没有告诉我们您使用的是哪种 DM)。它可能具有运行外部命令的能力,也可能具有直接键盘设置。
- 如果所有这些都失败了,我们至少可以看到如何让 Xfce 在启动用户会话时运行外部命令。
因此,尽管我无法立即回答您的问题,但我会从第 3 步着手解决它: