2

あるプロセスから完全な DBUS にアクセスしています。問題は、別のユーザーから実行され、DBUS のセッションが異なることです。したがって、セッションが異なる場合、別のプロセスを介して DBUS を使用するアプリケーションにアクセスできません。この問題を解決する方法を見つけました: 一部のスクリプトは、メイン ユーザーからファイル dbus セッション データに書き込みます (システムの読み込み時に設定しました)。これがそのスクリプトです:

#!/bin/bash
touch /.Xdbus
chmod 666 /.Xdbus
env | grep DBUS_SESSION_BUS_ADDRESS > /.Xdbus
echo 'export DBUS_SESSION_BUS_ADDRESS' >> /.Xdbus

そのファイルの例を次に示します。

DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-9yStbCgjwb,guid=0deadb6519676638e1e93f5000000023
export DBUS_SESSION_BUS_ADDRESS

ここで、そのファイルからデータを実行するだけで、両方の DBUS セッションが同じになります。ここにいくつかの問題があります:

#!/bin/bash
if [ -f /.Xdbus ]
then
    source /.Xdbus; /usr/bin/purple-remote "setstatus?status=away&message=At lunch"
else
    echo "File doesnt exist"
fi

ご覧のとおり、DBUS アプリケーションとして pidgin を使用しています。しかし、紫色のアプリケーションがないというエラーがスローされるため、DBUS セッションが異なります。だからコマンド:

source /.Xdbus

うまくいきませんでした。なんで?


UPD

source /.Xdbus; echo $DBUS_SESSION_BUS_ADDRESS; /usr/bin/purple-remote "setstatus?status=away&message=At lunch"; echo $DBUS_SESSION_BUS_ADDRESS;

→</p>

unix:abstract=/tmp/dbus-9yStbCgjwb,guid=0deadb6519676638e1e93f5000000023 No existing libpurple instance detected. unix:abstract=/tmp/dbus-9yStbCgjwb,guid=0deadb6519676638e1e93f5000000023
4

2 に答える 2

1

更新に基づいて、sourceコマンドは機能しています。したがって、問題はBash スクリプトではなく、または何らかの依存関係にありますpurple-remotelibpurple

このようなファイルをルート ディレクトリに作成することはお勧めできません。ファイルのより適切な場所を選択してみてください。おそらく次のいずれかです。

  • /home/username/.Xdbus
  • /var/local/.Xdbus- このディレクトリを所有するグループにユーザーを追加する必要がある場合があります
  • /tmp/.Xdbus
于 2010-07-03T17:48:49.400 に答える
1

ファイルシステムのルートである / を使用しているためだと思います。あなたが望むのは./またはデニスが言った絶対パスです。

$PWD/file または ${pwd}/file を使用することもできます

于 2010-07-03T17:55:35.643 に答える