dingsbums schrieb:
Wenn das Skript unter deinem Benutzer läuft, wäre
Es müsste schon in der selben User-Session laufen - derselbe Benutzer reicht nicht, denn ein Systemdienst hat keine Informationen über eine möglicherweise (!) laufende Desktop-Session.
gxmessage -timeout 30 -center -wrap -bg green -fg white " Backup ist fertig! "
eine Möglichkeit. Das Meldungsfenster wird auch ohne Interaktion automatisch nach 30s geschlossen. Das Paket gxmessage ggf. nachinstallieren.
Wie findet das Programm denn heraus, welche Desktop-Sitzung benachrichtigt werden soll? Wenn es sich in der Hinsicht wie xsession verhält, dann wird das nix als Systemdienst, wie pegu ja bereits herausgefunden hat:
| $ XAUTHORITY= DISPLAY= xmessage 'hello'
Error: Can't open display:
|
Dieser Ansatz funktioniert unter Xubuntu (XFCE 4) und kann die relevanten Umgebungsvariablen setzen:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 | #!/bin/sh
# Set DISPLAY and XAUTHORITY of a desktop session of the given user
# and then execute the given command.
# args
# 1. numeric user id
# 2. and remaining: command line to execute
[ -z "$DEBUG" ] || set -x
set -e
session=xfce4-session
user="$1"
shift
if pid=$(ps --no-headers -o uid,pid $(pgrep "$session") \
| awk -v "uid=$user" '$1 == uid {print $2; found=1} END {if (!found) exit 1}'); then
env $(awk -F = -v RS=\\0 '$1 == "DISPLAY" || $1 == "XAUTHORITY"' /proc/$pid/environ) "$@"
else
echo "ERROR: could not find session of user $user" >&1
exit 1
fi
|
Bei mir poppt dann ein xterm auf (in einer Desktop-Session getestet, weil ich zu faul war, einen Systemdienst aufzusetzen):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | $ DISPLAY= XAUTHORITY= xterm && echo OK
xterm: Xt error: Can't open display:
xterm: DISPLAY is not set
$ DISPLAY= XAUTHORITY= ./x $(id -u) xterm && echo OK
OK
$ DEBUG=1 DISPLAY= XAUTHORITY= ./x $(id -u) xterm && echo OK
+ set -e
+ session=xfce4-session
+ user=1000
+ shift
+ awk -v uid=1000 $1 == uid {print $2; found=1} END {if (!found) exit 1}
+ pgrep xfce4-session
+ ps --no-headers -o uid,pid 1176
+ pid=1176
+ awk -F = -v RS=\0 $1 == "DISPLAY" || $1 == "XAUTHORITY" /proc/1176/environ
+ env DISPLAY=:0 XAUTHORITY=/home/user/.Xauthority xterm
OK
|
Du musst nur herausfinden, wie der Prozess der Session für Dich (also unter Ubuntu) heißt und die Variable session in Zeile 14 entsprechend setzen.