脚本的正确位置在哪里,以便在系统启动后运行一次?

时间:2017-08-13 19:46:36

标签: zsh startup xorg

在我的# map capslock to escape ps cax | grep xcape > /dev/null if [ $? -eq 0 ]; then # do nothing else xmodmap ~/.xmodmap & xcape & fi 我有这样的事情:

CAPS LOCK

这似乎正在处理系统启动,但是在我的计算机进入待机状态并唤醒后,我失去了绑定,因此我的CTRL停止表现为ESC~/.zprofile。我尝试将此脚本放在许多位置,包括resume@.service,类似无济于事。我的系统是arch linux(Antergos发行版),GNOME 3作为桌面环境。

REVISED:

看起来在Arch linux中执行此操作的正确方法是创建一个将在恢复时执行任务的服务。正如本指南所说:https://wiki.archlinux.org/index.php/Power_management#Sleep_hooks

但是,我不确定,我将如何开始systemctl start resume@.service,因为它没有通常的名称?我担心,User=%I不会在这里工作。 编辑:

刚刚发现,这就是所谓的模板单元文件,所以我想我只需要传递用户名作为参数,这将代替/etc/systemd/system/resume@.service [Unit] Description=User resume actions After=suspend.target [Service] User=%I Type=oneshot Environment=DISPLAY=:0 ; ExecStartPre= ExecStart=/usr/bin/sh -c "/usr/bin/xmodmap ~/.xmodmap & /usr/bin/xcape &" [Install] WantedBy=suspend.target 行......?

我已根据自己的需要调整了该页面的脚本,现在看起来就像下面一样。但它不起作用。对此有何看法?

journalctl -xe

xmodmap给出了这个,所以我猜服务已经启动,但没有看到xcapeSep 10 19:23:44 antergos systemd[1]: Starting User resume actions... -- Subject: Unit resume@branchito.service has begun start-up -- Defined-By: systemd -- Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel -- -- Unit resume@branchito.service has begun starting up. Sep 10 19:23:44 antergos systemd[1]: Started User resume actions. -- Subject: Unit resume@branchito.service has finished start-up -- Defined-By: systemd -- Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel -- -- Unit resume@branchito.service has finished starting up. 的影响。

test.rb

1 个答案:

答案 0 :(得分:1)

你的~/.zshrc不是生活的好地方;那将 每次启动时都会调用xmodmap(全局X设置)命令 一个新的外壳。 (如果你,你正在做什么可能已经有效了 每次系统唤醒时,只需启动一个新的shell。)

更好的解决方案是仅在启动时调用此方法 唤醒/简历。你应该能够通过把它做到这一点 xmodmap加入一个小的 p \ strong m 管理脚本 /etc/pm/sleep.d/。您还需要在~/.xinitrc中使用X. 启动。

对此进行了更多讨论 here