
不久前,我詢問如何在螢幕鎖定時停止音樂播放器。答案是使用 actkbd,它的作用就像一個魅力。現在我想將 actkbd 作為服務新增到 systemd 中,以便在啟動時自動啟動它。如您所看到的,服務已正確啟動,它也顯示在 htop 中。下面是一些輸出:
[root@hostname init.d]# systemctl start actkbd.service
[root@hostname init.d]# systemctl status actkbd.service
actkbd.service - Actkbd: Daemon for X-independent shortcuts
Loaded: loaded (/etc/systemd/system/multi-user.target.wants/actkbd.service)
Active: active (running) since Tue, 10 Apr 2012 17:50:36 +0200; 2s ago
Process: 23526 ExecStart=/usr/local/sbin/actkbd -d /dev/input/event3 -D (code=exited, status=0/SUCCESS)
Main PID: 23527 (actkbd)
CGroup: name=systemd:/system/actkbd.service
└ 23527 /usr/local/sbin/actkbd -d /dev/input/event3 -D
[root@hostname init.d]# systemctl stop actkbd.service
[root@hostname init.d]# ps -C actkbd
PID TTY TIME CMD
我有以下actkbd.service
文件/etc/systemd/system/multi-user.target.wants/
[Unit]
Description=Actkbd: Daemon for X-independent shortcuts
[Service]
Type=forking
ExecStart=/usr/local/sbin/actkbd -d /dev/input/event3 -D
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill -15 $MAINPID
Restart=always
User=root
所以問題是,在使用 systemctl 啟動服務後,如果我按常用的暫停 Rhythmbox 的快捷鍵,什麼也不會發生。如果我只是/usr/local/sbin/actkbd -d /dev/input/event3 -D
透過根終端機執行命令,一切都會正常。為什麼?
抱歉,如果這是顯而易見的事情,我是 systemd 業務的新手,但我找不到任何對我有幫助的東西。
乾杯。
編輯:這仍然不起作用。如果有人有時間嘗試並重現它,我將不勝感激。如果可能的話,我將提交錯誤報告。
答案1
如果您希望使用者能夠存取設備並運行服務單元,那麼您需要製定udev
規則並設定適當的MODES
權限以允許使用者存取設備。簡單地啟動單元檔案是User=root
不正確的,因為您不是以 root 身分執行會話,而是以您的使用者身分執行會話。當您從根終端運行它時,您正在從使用者會話內部啟動根終端。要獲得有關此內容的更多信息,請查找 上的信息systemd --user
。
整理 udev 規則
使用以下命令為您提供填充udev
規則所需的資訊:
udevadm info --path=$(udevadm info -q path -n /dev/input/event3)
從上述命令的輸出建立您的 udev 規則/etc/udev/rules.d/<device>.conf
。在您喜歡的文本編輯器中打開它並填寫變量
SUBSYSTEM=="device",
SYSFS{idVendor}=="ID Vendor Here" ,
SYSFS{idProduct}=="ID Model Here",
MODE="666"
有關製作和命名udev
規則的更多信息,請查看man udev
您的 Linux 發行版的 Wiki。設定規則後,重新啟動。然後登入 X 後啟動裝置。
另外,這裡有一個很多比您提供的文件更健全的系統單元文件。
[Unit]
Description=Actkbd: Daemon for X-independent shortcuts
[Service]
ExecStart=/usr/sbin/actkbd -Dd /dev/input/event3
RemainAfterExit=yes
Type=forking
Restart=always