web-dev-qa-db-ja.com

cronから呼び出されたときにgvfs-infoでファイルメタデータを出力するにはどうすればよいですか?

私は奇妙な問題を抱えており、多分誰かが私にいくつかの洞察を与えることができるかもしれないことを望んでいました。途方に暮れるようなもの。

Linux MintでNemoを使用すると、時々クラッシュする傾向があり、大量のデスクトップアイコンがシフトするという厄介な副作用があります。私は、すべてのアイコンの場所を1日に1回テキストファイルにダンプし、次に別の場所にそれらを本来の位置に戻す簡単なスクリプトを書くだけだと思いました。

手動で実行すると完全に機能しますが、cronを介して実行すると機能しません。

問題はgvfs-infoにあることがわかりました。基本的に、私は次のコマンドを使用します。

gvfs-info -a 'metadata::nemo-icon-position' /path/to/file

生成されます:

metadata::nemo-icon-position: 220,682

出力で。

ただし、gvfs-infoは実際には〜/ .local/share/gvfs-metadata /に格納されているため、メタデータを取得するためにdbus-daemonと通信する必要があります。 cron(またはSudoまたはssh)から生成されている場合、dbus-daemonにアクセスできません。これは、私が発見した事実 here および here が可能であることを示唆しています。解決。

その解決策に従って、ターミナルから正常に実行できます:

dbus-launch --exit-with-session /path/to/myscript.sh

期待どおりに動作します。ただし、メタデータなしで同じ出力を生成します。私はdbus-launchを呼び出した場所と 'su user'と組み合わせて多くの順列を試して、実際にユーザーとして実行されていることを確認しましたが、ここで何が起こっているのかよくわかりません。

誰でも何か考えがありますか?

1
Shaav

@steeldriverのコメントはまさに私が必要としたものでした(ありがとう!)。

私は以下を リモートシェルを介してGset​​tingsを変更する方法 から持ち上げました、そしてそれはまさに私が必要としたものでした!

PID=$(pidof -s nemo)
QUERY_ENVIRON="$(tr '\0' '\n' < /proc/${PID}/environ | grep "DBUS_SESSION_BUS_ADDRESS" | cut -d "=" -f 2-)"
export DBUS_SESSION_BUS_ADDRESS="${QUERY_ENVIRON}"

デスクトップ環境で動作することがわかっているので、「nemo」を使用しました。

0
Shaav