Libpurple non funziona da bash
Domanda
Sto usando l'accesso ai DBUS approfondita da qualche processo. Il guaio è che funziona da un altro utente e la sessione di DBUS è diverso per loro. Quindi non posso acces applicazione che utilizza DBUS attraverso un altro processo se le sessioni sono diversi. Ho trovato il modo per risolvere questo problema: alcune operazioni di scrittura di script in file dbus i dati della sessione da utente principale (ho impostato al sistema di caricamento). Ecco lo script:
#!/bin/bash
touch /.Xdbus
chmod 666 /.Xdbus
env | grep DBUS_SESSION_BUS_ADDRESS > /.Xdbus
echo 'export DBUS_SESSION_BUS_ADDRESS' >> /.Xdbus
Ecco un esempio di quel file:
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-9yStbCgjwb,guid=0deadb6519676638e1e93f5000000023
export DBUS_SESSION_BUS_ADDRESS
Ora non mi resta che eseguire i dati da quel file e entrambe le sessioni DBUS sarà lo stesso. Ecco alcuni problemi:
#!/bin/bash
if [ -f /.Xdbus ]
then
source /.Xdbus; /usr/bin/purple-remote "setstatus?status=away&message=At lunch"
else
echo "File doesnt exist"
fi
Come si può vedere, sto usando Pidgin come applicazione DBUS. Ma genera l'errore, che non c'è nessuna applicazione viola, in modo che le sessioni di DBUS sono diverse! Così comand:
source /.Xdbus
Non ha funzionato. Perché?
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
Soluzione
Sulla base della sua aggiornamento, il comando source
è lavoro. Quindi il problema è con purple-remote
o libpurple
o qualche dipendenza, piuttosto che con il vostro script Bash.
Non è una buona idea per creare tali file nella directory principale. Prova a scegliere una posizione più appropriata per il file. Uno dei seguenti forse:
-
/home/username/.Xdbus
-
/var/local/.Xdbus
- potrebbe essere necessario aggiungere l'utente al gruppo che possiede questa directory -
/tmp/.Xdbus
Altri suggerimenti
Credo che sia perché si utilizza / che è la radice del filesystem. Quello che vuoi è ./ o un percorso assoluto come detto Dennis.
È inoltre possibile utilizzare $ PWD / file o $ {PWD} / file