我的 Packard-Bell 笔记本电脑键盘有 2 个非标准按键,它们与导航箭头组合在一起,形成 2 行 x 3 列子块,而不是传统的倒 T 形。当然,现成的 Linux 内核无法识别这些键。
setkeycodes
我可以以 root 身份使用命令来激活它们loadkeys
。
为了避免手动启动命令,我设计了一个 systemd 单元(.service 文件),以便在启动期间配置键盘。
直到最近,当我将我的笔记本电脑从非常旧的 Fedora 版本升级到 Fedora 35 时,这种方法一直运行良好。
我现在在我尝试修改的所有地图上都收到“keymap x:权限被拒绝”。我不明白为什么。
除非我错了,否则系统 systemd 服务启动的所有命令都以 root 身份运行。因此,loadkeys 应该有权访问任何文件(我必须将映射文件从用户目录移动到 /etc 以修复“没有此类文件或目录”错误)并能够更改控制台映射。
由于担心可能出现竞争条件,我更改了依赖项,以便在达到 multi-user.target 之后(而不是之前的某个时间)启动服务,并且我确信每个分区都已安装并准备就绪。但这并没有修复错误。
我怀疑我的服务是在某个非特权用户下运行的,但我无法猜测是哪个(我无法使用id
或者whoami
因为命令不是由 shell 解释的,并且我无法将输出重定向到某个文件以供以后使用)。
Man 说添加 User= 或 Group= 是没有用的,因为单位已经归 root 所有。
更新:我能够检查该服务是否以root
.因此,键盘映射 x:权限被拒绝没有意义。如果我直接以 root 身份运行该命令(而不是通过systemctl
),则loadkeys
工作正常。
所以呢?你能指出我的方向吗?
答案1
用户:
$ localectl set-keymap 'YourKeyboardMapName"
如果是 selinux,
根:
# /sbin/restorecon -v /.hcwd (to avoid selinux complaints)