启动时执行命令以交换 caps lock 和 ctrl

启动时执行命令以交换 caps lock 和 ctrl

我有点困惑为什么这没有按预期工作。我的目标是映射大写锁定键来控制。我正在使用Debian。为此,我使用以下命令

/usr/bin/setxkbmap -layout "$(setxkbmap -print | awk -F + '/xkb_symbols/ {print $2}')" -option ctrl:nocaps

如果我通过终端执行它,效果非常好。但是,我希望在启动或登录时完成此操作,并且始终手动执行。我尝试将此命令添加到 XFCE 中的自动启动会话应用程序中,并将该命令放入我的~/.profile.然而,这两种选择似乎都不起作用。我仍然必须手动执行它(在正确映射之后)。我究竟做错了什么?

答案1

setxkbmap该命令添加后没有执行的 原因~/.profile是,只有在以下情况下,您的 shell(可能是 bash)才会读取该文件:登录外壳已启动。在X终端模拟器中不要启动登录 shell。如果您使用,则添加setxkbmap到您的,但系统上有更好的方法可用- 修改您的部分,例如:~/.bashrcBashdebianXKBOPTIONS/etc/default/keyboard

root@debian:/home/ja# cat /etc/default/keyboard
# KEYBOARD CONFIGURATION FILE

# Consult the keyboard(5) manual page.

XKBMODEL="pc105"
XKBLAYOUT="us"
XKBVARIANT=""
XKBOPTIONS="ctrl:nocaps"

BACKSPACE="guess"

现在运行此命令,如下所述man 7 keyboard

udevadm trigger --subsystem-match=input --action=change

您甚至不必重新启动lightdm。下次启动时将自动应用lightdm设置。/etc/default/keyboard我刚刚在我的Debian 9.4.

答案2

我认为更好的方法是在您的主目录中创建一个文件 .xsessionrc 。

cat .xsessionrc 
setxkbmap -option ctrl:nocaps

每次会话开始时都会读取此文件。
这样,只有您的会话受到影响。
其他用户不明白。
在 Debian 和 NetBSD 上没问题。

相关内容