在我的# 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
给出了这个,所以我猜服务已经启动,但没有看到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.
的影响。
test.rb
答案 0 :(得分:1)
你的~/.zshrc
不是生活的好地方;那将
每次启动时都会调用xmodmap(全局X设置)命令
一个新的外壳。 (如果你,你正在做什么可能已经有效了
每次系统唤醒时,只需启动一个新的shell。)
更好的解决方案是仅在启动时调用此方法
唤醒/简历。你应该能够通过把它做到这一点
xmodmap
加入一个小的 p \ strong m 管理脚本
/etc/pm/sleep.d/
。您还需要在~/.xinitrc
中使用X.
启动。
对此进行了更多讨论 here