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
È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top