登录时精确运行一次 shell 命令

登录时精确运行一次 shell 命令

我在 Ubuntu 18.04 上尝试交换CtrlCapsLock使用xmodmap.但未能找到一种自动执行此操作的方法:.[X|x]modmap[rc]并且.config/autostart不起作用。还有哪些其他方法呢?有可能通过吗systemd

短的:桌面条目为.config/autostart/etc/xdg/autostartExec不是一个成熟的 shell 命令,因此sh -c可能需要

[Desktop Entry]
Type=Application
Exec=sh -c "xmodmap ~/.xmodmaprc"

答案1

由于 Ubuntu 在 17.10 版本中从 Unity 切换回了 Gnome,因此您应该能够使用Gnome自启动机制(如果登录时启动 shell 命令就足够了)。

为此:

  • 你将需要sudo特权
  • 创建一个运行必要命令(例如switch_ctrl_capslock.sh)的 shell 脚本并将其放入/usr/local/bin
  • 创建一个包含(或多或少)以下内容的 .desktop文件:/etc/xdg/autostart/switch_ctrl_capslock.desktop
    [Desktop Entry]
    Type=Application
    Exec=/usr/local/bin/switch_ctrl_capslock.sh
    

如果一切设置正确,该脚本应该在用户登录 Gnome 时运行一次。

如需进一步阅读,请查看

答案2

道路systemd

登录后

[Unit]
Description=Change keyboard layout AFTER LOGIN TO GUI session
After=graphical.target

[Service]
#execute once only
Type=oneshot
ExecStart=/usr/bin/xmodmap home/<user>/.xmodmaprc

[Install]
WantedBy=graphical.target

放在下面~/.config/systemd/user/xmodmap.service(注意不要用您的用户名替换用户!)。

要启用服务自动加载:

systemctl --user enable xmodmap.service

首次启动无需重新登录;

 systemctl --user start xmodmap.service

一旦gdm启动就运行它

与上面相同的文件,但将其放置在/etc/systemd/system/xmodmap.service并将以下行添加到[Unit]要保存的部分:

 After=display-manager.service

以 root 身份(或通过 sudo):

systemctl enable xmodmap.service

当然,这会影响所有用户。

相关内容