2010-07-03 3 views
2

Я использую доступ к тщательному DBUS из некоторого процесса. Беда в том, что он работает от другого пользователя, а сеанс DBUS отличается для них. Поэтому я не могу использовать приложение, которое использует DBUS через другой процесс, если сеансы разные. Я нашел способ решить эту проблему: какой-то сценарий записывает в файл dbus данные сеанса от главного пользователя (я установил его при загрузке системы). Вот этот скрипт:Libpurple не работает из bash

#!/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 

Как вы могли видеть, я использую pidgin как приложение DBUS. Но это порождает ошибку, что нет фиолетового приложения, поэтому сеансы 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; 

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

Не так ли? Что вы видите, если «echo $ DBUS_SESSION_BUS_ADDRESS» сразу после поиска /.Xdbus? Или «cat /.Xdbus» прямо перед его поиском? –

+0

@ owen-s мой пост обновлен – Ockonal

ответ

1

Основываясь на своем обновлении, команда source работает. Поэтому проблема связана с purple-remote или libpurple или некоторой зависимостью, а не с вашим сценарием Bash.

Не рекомендуется создавать такие файлы в корневом каталоге. Попробуйте выбрать более подходящее место для вашего файла. Один из следующих возможно:

  • /home/username/.Xdbus
  • /var/local/.Xdbus - вы, возможно, придется добавить пользователя в группу, которой принадлежит этот каталог
  • /tmp/.Xdbus
+0

Хм, я переместил его в /tmp/.Xdbus и теперь нет никаких ошибок, но статус не меняется. – Ockonal

+0

@Ockonal: Видимо, теперь он работает? Что еще вы сделали, чтобы исправить это? –

1

Я думаю, это потому, что вы используете/который является корнем файловой системы. То, что вы хотите, является ./ или абсолютным путем, как сказал Деннис.

Вы также можете использовать $ PWD/file или $ {pwd}/файл

+0

с $ PWD/.Xdbus говорит, что файл не существует. Но с /tmp/.Xdbus нет ошибок. Но статус тот же. – Ockonal

+0

зависит от того, где вы запускаете скрипт. Если возможно, выберите абсолютный путь. – Aif

+0

Сценарий находится в /bin/script.sh с правами прав '-rwxr - r-- 1 root root' – Ockonal