アイコンを管理するスクリプトを作成しており、そのためにコマンドgvfs-set-attribute
を使用しています。ターミナルでスクリプトを実行するとスクリプトは正常に動作しますが、cron
を使用すると動作しません。ここに私の問題の簡略版があります:
#!/bin/bash
PATH=/home/myUser/bin:/home/myUser/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/home/myUser/.local/share/gvfs-metadata
gvfs-set-attribute -t string /home/myUser/myFolder metadata::custom-icon file:///home/myUser/myImage.png
crontab -e
を使用し、毎分* * * * * /home/myUser/script.bash
を実行するようにスクリプトを解決しました。問題は、cron
を指定して実行すると、このスクリプトがまったく機能しないことです。
this 他の問題で説明されているように、スクリプトにPATH
をすでに記述しており、コマンドwhereis gvfs-set-attribute
の出力は次のとおりです。
gvfs-set-attribute: /usr/bin/gvfs-set-attribute /usr/share/man/man1/gvfs-set-attribute.1.gz
したがって、ここでPATH
に問題はないと想定しています。また、絶対パス/usr/bin/gvfs-set-attribute
を使用してスクリプトを直接実行しようとしました。しかし、それらのいずれかが機能しました...誰が何が起こっているのか、なぜgvfs-set-attribute
をcron
と一緒に使用できないのか誰にも分かりませんか?
次の行をスクリプトに追加してみてください(明らかにgvfs-set-attribute
の呼び出しの前):
export $(cat /proc/$(pgrep gnome-session)/environ | grep -z ^DBUS_SESSION_BUS_ADDRESS)
既存のgnome-sessionからDBUS_SESSION_BUS_ADDRESS
環境変数を選択します。ただし、これには2つの前提があります。
複数のgnome-sessions(つまり、複数のユーザーごとに1つ)がある場合は、-u
オプションをpgrep
に追加することにより、この行を特定のユーザーに対して機能するように変更できます。例えば:
export $(cat /proc/$(pgrep gnome-session -u myUser)/environ | grep -z ^DBUS_SESSION_BUS_ADDRESS)
Gnomeを使用していない場合は、gnome-session
をLXDEのlxsession
などの別の値に置き換えることで、他のデスクトップ環境でも機能すると思います。
cron
ジョブはXウィンドウシステムでは実行されず、通常はGUIオブジェクトにアクセスしません。
ただし、ごまかすことはできます。
GUIで実行されているターミナルで:
xhost +localhost
echo "export DISPLAY=\"$DISPLAY\"" >$HOME/.display
そして、cron
ジョブの開始近く:
source $HOME/.display
読んだ man xhost
。