我有几个启动应用程序:
user@host:~$ ls -l .config/autostart/
. . .
. . . XXX.desktop
. . . YYY.desktop
. . . ZZZ.desktop
. . . setxkbmap.desktop
其中包括禁用 Caps Lock 的命令:
setxkbmap -option caps:none
首先,每当我尝试用 编辑任何这些启动命令时sleep
,它们似乎不起作用:
sleep 20; setxkbmap -option caps:none
或者...
sleep 20 && setxkbmap -option caps:none
其次,如果我从所有启动命令中删除睡眠命令,然后将 Caps Lock 禁用命令放在列表顶部,它不起作用,但其他命令起作用......
如果在终端中运行所有命令,在启动应用程序之外,它们都可以正常工作,所以我不确定为什么它们在启动时不起作用。
更新
根据@Xen2050的回答,我把他建议的方法改编成可行的解决方案。对于两个启动命令,我使用以下形式:
bash -c "sleep 20; specific_command"
至于其他命令,我保留为默认启动命令。这样就没问题了,因为机器启动速度更快,而且 Caps Lock 禁用命令也一直有效。
更新2
做了一些额外的研究,发现这xkb
可能是禁用 Caps Lock 的最佳方法。由于这个问题是关于启动应用程序的,因此接受的答案是有效的。但如果其他人最终在这里寻找如何在 Ubuntu 16.04 上禁用 Caps Lock 键,这里有一些有用的提示:。
https://askubuntu.com/questions/82837/how-do-i-make-the-caps-lock-key-a-third-shift-key
https://askubuntu.com/questions/53038/how-do-i-remap-the-caps-lock-key
https://unix.stackexchange.com/questions/90089/remapping-both-caps-lock-and-shiftcaps-lock-in-xkb
我继续编辑/usr/share/X11/xkb/symbols/pc
,但我认为使用用户覆盖可能是正确的方法(正如@quixotic 建议的那样):
答案1
我认为 .desktop 文件不会Exec=
在完整/常规 shell 中运行其命令,因此如果您想使用多个命令,则需要明确运行包含这些命令的 shell。例如,这些应该可以工作:
Exec=sh -c "sleep 5; notify-send test-delay"
或者就你的情况而言:
Exec=sh -c "sleep 20; setxkbmap -option caps:none"