在我的~/.zshrc中,我有这样的东西:
# 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和类似位置,但都无济于事。我的系统是arch linux (Antergos发行版),桌面环境是GNOME 3。
修订:
看起来在Arch linux中做这件事的正确方法是创建一个服务,它将在恢复时完成任务。正如本指南所说:https://wiki.archlinux.org/index.php/Power_management#Sleep_hooks
但是,我不确定如何启动resume@.service,因为它没有通常的名称。我担心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.targetjournalctl -xe提供了这一点,所以我猜服务启动了,但看不到xmodmap和xcape的影响。
Sep 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.发布于 2017-08-15 23:12:26
您的~/.zshrc并不适合使用它;它将在您每次启动新的shell时调用xmodmap (一个全局X设置)命令。(如果您只是在每次系统唤醒时启动一个新的shell,那么您正在做的事情实际上可能已经起作用了。)
一个更好的解决方案是只在启动和唤醒/恢复时调用它。您应该能够通过将xmodmap行放入/etc/pm/sleep.d/中的一个小型p__ower m__anagement脚本中来实现这一点。你也会希望它出现在你的~/.xinitrc for X启动中。
关于这个here的更多讨论。
https://stackoverflow.com/questions/45664258
复制相似问题