A maneira mais segura de obter variáveis ambientais relacionadas à sessão X é obtê-las do ambiente de um processo do usuário que está conectado ao X. Aqui está uma adaptação do script que eu uso exatamente com o mesmo propósito (embora DBUS_SESSION_BUS_ADDRESS não parece ser um problema para mim no Debian):
X=Xorg # works for the given X command
copy_envs="DISPLAY XAUTHORITY DBUS_SESSION_BUS_ADDRESS"
tty=$(ps h -o tty -C $X | head -1)
[ -z "$tty" ] && exit 1
# calling who with LANG empty ensures a consistent date format
who_line=$(LANG= who -u | grep "^[^ ]\+[ ]\+$tty")
x_user=$(echo $who_line | cut -d ' ' -f 1) # the user associated with the tty
pid=$(echo $who_line | cut -d ' ' -f 7) # the user's logon process
for env_name in $copy_envs
do
# if the variable is not set in the process environment, ensure it does not remain exported here
unset "$env_name"
# use the same line as is in the environ file to export the variable
export "$(grep -az "^$env_name=" /proc/$pid/environ)" >/dev/null
done
sudo -u "$x_user" notify-send "hello"
Isso envia uma mensagem para o primeiro usuário X encontrado, embora você possa adicionar um loop para enviá-lo a todos os usuários. Espero que isso ajude.
Atualizar
Parece que as atualizações no formato utmp fazem com que who
imprima uma exibição em vez de uma tty na segunda coluna. Isso realmente torna as coisas mais fáceis, anteriormente ele apenas imprimia a exibição no comentário no final e eu decidi que não era seguro confiar na resposta original. Se este for o caso, tente isto:
X=Xorg # works for the given X command
copy_envs="DISPLAY XAUTHORITY DBUS_SESSION_BUS_ADDRESS"
# calling who with LANG empty ensures a consistent date format
who_line=$(LANG= who -u | awk '$2 ~ ":[0-9]"')
x_user=$(echo $who_line | cut -d ' ' -f 1) # the user associated with the tty
pid=$(echo $who_line | cut -d ' ' -f 7) # the user's logon process
for env_name in $copy_envs
do
# if the variable is not set in the process environment, ensure it does not remain exported here
unset "$env_name"
# use the same line as is in the environ file to export the variable
export "$(grep -az "^$env_name=" /proc/$pid/environ)" >/dev/null
done
sudo -u "$x_user" notify-send "hello"