2017-08-13 97 views
2

在我~/.zshrc我有這樣的事情:腳本的正確位置在哪裏,以便在系統啓動後運行一次?

# map capslock to escape 
ps cax | grep xcape > /dev/null 
if [ $? -eq 0 ]; then 
    # do nothing 
else 
    xmodmap ~/.xmodmap & xcape & 
fi 

這似乎是工作在系統啓動,但之後我的電腦進入待機和喚醒,我失去約束力,所以我CAPS LOCK停止行爲就像CTRLESC。我試圖把這個腳本放在很多地方,包括~/.zprofile和類似的無濟於事。我的系統是Arch Linux(Antergos發行版),GNOME 3作爲桌面環境。

修訂:

看起來像Arch Linux的做這件事的正確方法,是使一個服務,將做簡歷的任務。正如本指南所說:https://wiki.archlinux.org/index.php/Power_management#Sleep_hooks

但是,我不確定,我將如何開始[email protected],因爲它沒有通常的名稱?恐怕,systemctl start [email protected]在這裏不起作用。 編輯:

剛剛發現,這就是所謂的模板單元文件,所以我想我只需要通過用戶名作爲參數,這將被置於User=%I行......?

我已經從該頁面調整了腳本,以滿足我自己的需要,現在看起來像下面這樣。但它不起作用。對此有任何想法?

/etc/systemd/system/[email protected] 

[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給出了這樣的,所以我想啓動該服務,但沒有xmodmapxcape效應可見。

Sep 10 19:23:44 antergos systemd[1]: Starting User resume actions... 
-- Subject: Unit [email protected] has begun start-up 
-- Defined-By: systemd 
-- Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel 
-- 
-- Unit [email protected] has begun starting up. 
Sep 10 19:23:44 antergos systemd[1]: Started User resume actions. 
-- Subject: Unit [email protected] has finished start-up 
-- Defined-By: systemd 
-- Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel 
-- 
-- Unit [email protected] has finished starting up. 

回答

1

你的~/.zshrc是不是一個這個生活的好地方;那就是 每次啓動 一個新的shell時會調用你的xmodmap(全局X設置)命令。 (你在做什麼可能實際上已經工作,如果你簡單地 每次啓動一個新的shell系統喚醒

一個更好的解決辦法是有這個調用僅在啓動和喚醒 /恢復。您應該能夠通過將 xmodmap行成一個小p奧爾 anagement腳本 /etc/pm/sleep.d/來實現這一目標。您還需要在~/.xinitrc中啓用X 。

關於此問題的更多討論 here

相關問題