私はここに投稿されたタスクに基づいてスクリプトを使用しています。cronを使用してpidginステータスを更新する
Wi-Fiが切断される前に自動的に切断され、Wi-Fiが再接続されたときに再接続するwicdスクリプトを作成しようとしています。
ただし、dbus / pidginは、環境変数が設定されていてもdbusセッションが見つからないようです。
私の設定:
- アーチLinux
- ピジン2.9.0
- リザ2.9.0-2
自動ロードスクリプト(Xfceの起動時に実行):
#!/bin/bash
touch /tmp/dbus_session_data
env | grep DBUS_SESSION_BUS_ADDRESS > /tmp/dbus_session_data
echo 'export DBUS_SESSION_BUS_ADDRESS' >> /tmp/dbus_session_data
スクリプト実行後のtmpファイル:
[skaverat@eeepthought ~]$ cat /tmp/dbus_session_data
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-gZMqzhdS2S,guid=9b8b3169f14346902127832000000043
export DBUS_SESSION_BUS_ADDRESS
さて、別の環境に行きましょう。
[root@eeepthought ~]# env | grep DBUSD
[root@eeepthought ~]# source /tmp/dbus_session_data
[root@eeepthought ~]# env | grep DBUS
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-gZMqzhdS2S,guid=9b8b3169f14346902127832000000043
[root@eeepthought ~]# purple-remote getstatus
No existing libpurple instance detected.
紫 - 一般的な環境でのリモート通話:
[skaverat@eeepthought ~]$ purple-remote getstatus
available
何が間違っているのか知っていますか?
答え1
DBusセッションは他のユーザー間で共有できません。これが設計された方法です。
現在、解決策を入手できない場合があります。ルートを使用してこれを実行したいのはなぜですか?
その場合は、su - USERNAME -c /path/to/this/script.sh
次のような起動スクリプトを使用します。
#!/bin/bash
. ~/.dbus/session-bus/*
purple-remote getstatus
これはrootユーザーに適用されます。
PS:pidginでログインしたユーザーにcronを設定しないのはなぜですか?
答え2
私が知っている限り、他のユーザーのD-Busセッションに接続することはできません。したがって、root@eeepthought は別のユーザーで、skaverat@eeepthought の D-Bus セッションへの接続が拒否されます。それがあなたがしていることのすべてです。