我正在尝试i3
使用inotify
. 在我的情况下,inotify
开始使用systemctl
.
systemctl 脚本:
[Unit]
Description=Inode event watcher
[Service]
User=root
Type=forking
ExecStart=/usr/local/services/inotify/start.sh
[Install]
WantedBy=default.target
/usr/local/services/inotify/start.sh:
I3_CURRENT_WORKSPACE='/etc/i3/script/swiping-workspace/current'
I3_UPDATE_WORKSPACE="/etc/i3/script/swiping-workspace/update.sh"
inotify $I3_WORKSPACE_TRIGGER $I3_WORKSPACE_UPDATE &
注意:我的目标是在磁盘上update.sh
的current
文件更改时执行。
/etc/i3/script/swiping-workspace/update.sh:
sudo -u $user i3 workspace $(cat $I3_CURRENT_WORKSPACE)
$user
安装 i3 的用户在哪里。我以 root 身份运行此命令。我也尝试了这些开关,但无济于事:SCREEN=':0' -E -H
问题:
触发inotify
事件时,会发生错误。这是我得到的日志消息(使用journalctl
):
<date> start.sh[1427]: /etc/i3/script/swiping-workspace/ MODIFY current
<date> sudo[6698]: root : TTY=unknown ; PWD=/ ; USER=$user ; COMMAND=/usr/bin/i3 workspace "6"
<date> sudo[6698]: pam_unix(sudo:session): session opened for user $user by (uid=0)
<date> start.sh[1427]: <date> - Additional arguments passed. Sending them as a command to i3.
<date> start.sh[1427]: <date> - ERROR: Could not get i3 IPC socket path
<date> sudo[6698]: pam_unix(sudo:session): session closed for user $user
我不明白为什么i3
无法接收systemctl
发送它的命令。
inotify
如果我自己启动命令(在一个独特的终端中)而不是使用 systemctl ,整个设置实际上是有效的。
有人有线索吗?