Discussion:
In Hintergrund laufendes (root) Script soll Userbrowser öffnen
(zu alt für eine Antwort)
Jan Novak
2020-03-25 19:06:33 UTC
Permalink
Hallo ihr Lieben,

ich habe ein script welches im Hintergrund als root läuft.
Es erstellt unter anderem auch eine html Datei mit dynamischem Inhalt.
Ist es möglich, dass es einem bestimmten, angemeldeten X11 Benutzer den
Browser mit der Seite automatisch ohne zutun des Benutzers öffnet?

Ein

sudo -u jn chromium $myhtml

oder

DISPLAY=':0'; sudo -u jn chromium $myhtml

funktioniert leider nicht.
Über w(ho) sehe ich das hier

jn tty7 :0 14:04 5:55m 3:39 0.46s
x-session-manager


Jan
Stefan Wiens
2020-03-25 20:27:39 UTC
Permalink
Post by Jan Novak
ich habe ein script welches im Hintergrund als root läuft.
Es erstellt unter anderem auch eine html Datei mit dynamischem Inhalt.
Ist es möglich, dass es einem bestimmten, angemeldeten X11 Benutzer
den Browser mit der Seite automatisch ohne zutun des Benutzers öffnet?
Ein
sudo -u jn chromium $myhtml
oder
DISPLAY=':0'; sudo -u jn chromium $myhtml
funktioniert leider nicht.
Was funktioniert denn nicht? Fehlermeldung?
Post by Jan Novak
Über w(ho) sehe ich das hier
jn tty7 :0 14:04 5:55m 3:39 0.46s
x-session-manager
Hier geht es ohne Semikolon mit

# DISPLAY=:0.0 sudo -u stefan firefox /tmp/test.html &

oder mit

# export DISPLAY=:0.0 sudo -u stefan firefox /tmp/test.html &
--
Stefan
Jan Novak
2020-03-26 06:19:53 UTC
Permalink
Post by Stefan Wiens
Post by Jan Novak
ich habe ein script welches im Hintergrund als root läuft.
Es erstellt unter anderem auch eine html Datei mit dynamischem Inhalt.
Ist es möglich, dass es einem bestimmten, angemeldeten X11 Benutzer
den Browser mit der Seite automatisch ohne zutun des Benutzers öffnet?
Ein
sudo -u jn chromium $myhtml
oder
DISPLAY=':0'; sudo -u jn chromium $myhtml
funktioniert leider nicht.
Was funktioniert denn nicht? Fehlermeldung?
Post by Jan Novak
Über w(ho) sehe ich das hier
jn tty7 :0 14:04 5:55m 3:39 0.46s
x-session-manager
Hier geht es ohne Semikolon mit
# DISPLAY=:0.0 sudo -u stefan firefox /tmp/test.html &
oder mit
# export DISPLAY=:0.0 sudo -u stefan firefox /tmp/test.html &
Ich habe es jetzt auch ohne Semikolon und mit einem "&" am Ende der
Zeile versucht, keine Änderung.
Ich habe vergessen zu erwähnen, dass das eigentliche Script im
Hintergrund läuft. Wenn ich zum Beispiel als root das hier in einer
Shell starte

export DISPLAY=:0
sudo -u jn chromium /arc/scan-2020-03-26_07_09_56-27.html


öffnet sich das Browserfenster.
Starte ich das gleiche script im HIntergrund mit

echo meinscript.sh|at now +1min

tut sich nichts. Das ist es aber, was ich gerne hätte.
Übrigens bekomme ich mit 0:0 eine Fehlermeldung (Unable to open X
display), mit :0 nicht, wenn ich das script direkt starte.

Jan
Jan Novak
2020-03-26 06:45:11 UTC
Permalink
Am 26.03.20 um 07:19 schrieb Jan Novak:
Wenn ich zum Beispiel als root das hier in einer
Post by Jan Novak
Shell starte
export DISPLAY=:0
sudo -u jn chromium /arc/scan-2020-03-26_07_09_56-27.html
öffnet sich das Browserfenster.
Starte ich das gleiche script im HIntergrund mit
echo meinscript.sh|at now +1min
tut sich nichts. Das ist es aber, was ich gerne hätte.
Übrigens bekomme ich mit 0:0 eine Fehlermeldung (Unable to open X
display), mit :0 nicht, wenn ich das script direkt starte.
Ich muss mich korrigieren... obiges script öffnet den Browser korrekt...

Jedoch das eigentliche Script, welches die Arbeit macht nicht.
Es läuft als root (mit whoami während dem laufen überprüft).

Jan
Helmut Waitzmann
2020-03-26 16:00:02 UTC
Permalink
Post by Jan Novak
Ich habe vergessen zu erwähnen, dass das eigentliche Script im
Hintergrund läuft. Wenn ich zum Beispiel als root das hier in
einer Shell starte
export DISPLAY=:0
sudo -u jn chromium /arc/scan-2020-03-26_07_09_56-27.html
öffnet sich das Browserfenster.
Starte ich das gleiche script im HIntergrund mit
echo meinscript.sh|at now +1min
tut sich nichts. Das ist es aber, was ich gerne hätte.
«at»‐Jobs und X11 – das ist so eine Sache:  Ein «at»‐Job weiß (von
vorne herein) nicht, ob du gerade eine X11‐Sitzung betreibst, und,
auf welchem X‐Server sie läuft.  Deshalb ist das schwierig, von
dort aus herauszubekommen, ob und wo du eine X11‐Sitzung laufen
hast, und, wo man dann die dafür notwendige Prozess‐Umgebung
(u. a. die Autorisierungsdaten und vieles weitere) herbekommt. 

Hat vielleicht die Desktop‐Umgebung Cinnamon eine
Auto‐Start‐Einrichtung, bei der man Aufgaben einplanen kann, die
einmalig oder periodisch laufen, so lange man dort eingeloggt
ist?  Ich möchte eigentlich vermuten, dass es so etwas gibt. 
Schließlich haben sicher schon viele Anwender denselben Wunsch wie
Du gehabt.  Dann wäre das vielleicht eine bessere Möglichkeit als
«at». 

Falls da wirklich nichts zu finden wäre, könnte man immer noch
versuchen, selber mit «at» so etwas hinzubekommen.  Aber sei
gleich gewarnt:  Das artet in viel Arbeit aus. 

Übrigens:  «at»‐Jobs pflegen Fehlermeldungen per E‐Mail an den,
unter dessen Benutzerkennung das Job gelaufen ist, zu schicken (es
sei denn, man konfiguriert es anders), in deinem Fall wäre das die
E‐Mail‐Adresse <***@localhost>.  Sind dort Fehlermeldungen
angekommen? 
Post by Jan Novak
Übrigens bekomme ich mit 0:0 eine Fehlermeldung (Unable to open X
display),
Das ist zu erwarten:  «0:0» ist meines Wissens keine korrekte
Display‐Bezeichnung.  «:0.0» wäre eine. 
Post by Jan Novak
mit :0 nicht, wenn ich das script direkt starte.
«:0» ist ebenfalls korrekt. 
Jan Novak
2020-03-26 16:05:14 UTC
Permalink
Post by Jan Novak
echo meinscript.sh|at now +1min
tut sich nichts. Das ist es aber, was ich gerne hätte.
«at»‐Jobs und X11 – das ist so eine Sache:  Ein «at»‐Job weiß (von vorne
herein) nicht, ob du gerade eine X11‐Sitzung betreibst, und, auf welchem
X‐Server sie läuft.  Deshalb ist das schwierig, von dort aus
herauszubekommen, ob und wo du eine X11‐Sitzung laufen hast, und, wo man
dann die dafür notwendige Prozess‐Umgebung (u. a. die
Autorisierungsdaten und vieles weitere) herbekommt.
Das war nur ein Beispiel.Letztendlich ist es einscript, dass von scanbd
aufgerufen wird (einem deamon).



Jan
Helmut Waitzmann
2020-03-26 19:44:35 UTC
Permalink
Post by Jan Novak
Post by Helmut Waitzmann
«at»‐Jobs und X11 – das ist so eine Sache:  Ein «at»‐Job weiß
(von vorne herein) nicht, ob du gerade eine X11‐Sitzung
betreibst, und, auf welchem X‐Server sie läuft.  Deshalb ist
das schwierig, von dort aus herauszubekommen, ob und wo du eine
X11‐Sitzung laufen hast, und, wo man dann die dafür notwendige
Prozess‐Umgebung (u. a. die Autorisierungsdaten und vieles
weitere) herbekommt.
Das war nur ein Beispiel.Letztendlich ist es einscript, dass von
scanbd aufgerufen wird (einem deamon).
Der Name «scanbd» sagt mir jetzt zwar nichts; aber wenn der Scanbd
vom Init‐System gestartet wird, ist es nicht besser als bei «at».
Sieghard Schicktanz
2020-03-26 20:26:33 UTC
Permalink
Hallo Jan,
Post by Jan Novak
Post by Helmut Waitzmann
Post by Jan Novak
echo meinscript.sh|at now +1min
tut sich nichts. Das ist es aber, was ich gerne hätte.
«at»‐Jobs und X11 – das ist so eine Sache:  Ein «at»‐Job weiß (von
vorne > herein) nicht, ob du gerade eine X11‐Sitzung betreibst, und,
auf welchem > X‐Server sie läuft.  Deshalb ist das schwierig, von dort
aus > herauszubekommen, ob und wo du eine X11‐Sitzung laufen hast, und,
wo man > dann die dafür notwendige Prozess‐Umgebung (u. a. die >
Autorisierungsdaten und vieles weitere) herbekommt.
Das war nur ein Beispiel.Letztendlich ist es einscript, dass von scanbd
aufgerufen wird (einem deamon).
Ich hab' mir für sowas eine Krücke gebastelt, die mir aus der Prozessliste
die Werte für DISPLAY und den zugehörigrn USER 'raussucht. Das ganze liegt
als Skript-Fragment in einem File und schaut so aus:
-----------------
displayuser ()
{
local -a X=($(
/bin/ps aux -H | \
/bin/awk '
/\/Xorg[[:space:]]/
{ i= 11; while (($i !~ ":") && (i < NF)) i++; display= $i; }
/\/openbox[[:space:]]/ { user= $1 }
END { print display " " user }
'))
DISPLAY=${X[0]}
USER=${X[1]}
}
# Wenn X11 aktiv bei Aufruf
displayuser # get X11 activity
-----------------
Nachdem der X-Server nicht unter dem Benutzer läuft, dem die "Session"
gehört, muß da leider danach noch separat gesucht werden. Ich hab' das über
den Fenster-Manager gemacht, der bei mir "openbox" ist. Das muß für anderen
Einsatz angepasst werden.

Das in einem Skript ge"source"t werden diese beiden Variablen (die vorher
vorhanden sein müssen!) gesetzt und können für beliebige Aufrufe benutzt
werden, z.B. zum Umschalten in den Kontext des X-Benutzers oder zum
Anzeigen eines Benachrichtigungsfensters.
Klappt eigentlich recht gut, aber die Sucherei mußte ich auch schon
mehrfach anpassen, weil da "gelegentlich" auch am Format und anderem
gedreht wurde. (Und ja, "ps aux" ist eigentlich zuviel Information - aber
so läuft's, und das laß' ich jetzt lieber so...)
--
--
(Weitergabe von Adressdaten, Telefonnummern u.ä. ohne Zustimmung
nicht gestattet, ebenso Zusendung von Werbung oder ähnlichem)
-----------------------------------------------------------
Mit freundlichen Grüßen, S. Schicktanz
-----------------------------------------------------------
Jan Novak
2020-03-27 09:23:12 UTC
Permalink
Post by Sieghard Schicktanz
Ich hab' mir für sowas eine Krücke gebastelt, die mir aus der Prozessliste
die Werte für DISPLAY und den zugehörigrn USER 'raussucht. Das ganze liegt
-----------------
displayuser ()
{
local -a X=($(
/bin/ps aux -H | \
/bin/awk '
/\/Xorg[[:space:]]/
{ i= 11; while (($i !~ ":") && (i < NF)) i++; display= $i; }
/\/openbox[[:space:]]/ { user= $1 }
END { print display " " user }
'))
DISPLAY=${X[0]}
USER=${X[1]}
}
# Wenn X11 aktiv bei Aufruf
displayuser # get X11 activity
Ich habe kein openbox, sondern cinnamon mit lightdm... aber selbst wenn
ich das ersetze, bekomme ich keinen Ausgabe.

Aber ein
ps aux -H|grep -i xorg

root 912 1.2 2.1 585416 170880 tty7 Ssl+ 06:54 2:30
/usr/lib/xorg/Xorg :0 -seat seat0 -auth /var/run/lightdm/root/:0
-nolisten tcp vt7 -novtswitch

aus.
Post by Sieghard Schicktanz
Klappt eigentlich recht gut, aber die Sucherei mußte ich auch schon
mehrfach anpassen, weil da "gelegentlich" auch am Format und anderem
gedreht wurde. (Und ja, "ps aux" ist eigentlich zuviel Information - aber
so läuft's, und das laß' ich jetzt lieber so...)
Verständlich.

Jan
Sieghard Schicktanz
2020-03-28 20:08:14 UTC
Permalink
Hallo Jan,
Post by Jan Novak
Post by Sieghard Schicktanz
Ich hab' mir für sowas eine Krücke gebastelt, die mir aus der
Prozessliste die Werte für DISPLAY und den zugehörigrn USER 'raussucht.
...
Post by Jan Novak
Ich habe kein openbox, sondern cinnamon mit lightdm... aber selbst wenn
ich das ersetze, bekomme ich keinen Ausgabe.
Du mußt aber schon die Variablen selber verwerten, die shell-Funktion
_setzt_ die nur.
Post by Jan Novak
Aber ein
ps aux -H|grep -i xorg
root 912 1.2 2.1 585416 170880 tty7 Ssl+ 06:54
2:30 /usr/lib/xorg/Xorg :0 -seat seat0 -auth /var/run/lightdm/root/:0
-nolisten tcp vt7 -novtswitch
aus.
Da müßte wenigstens DISPLAY richtig 'rauskommen. Was sagt denn ps, wem der
"lightdm" gehört? Ist das der richtige USER oder steht da "root"? Wenn
letzteres, wird's bisserl schwieriger.
BTW, ich rufe die Ausgabefunktion (hier "Xdialog") so auf:

/usr/bin/sudo -Hu $USER /usr/bin/Xdialog --display $DISPLAY ...

Damit kriegt der Xdialog sein DISPLAY und kann sich auch gleich (wegen
"sudo -H") ganz "heimisch fühlen".
--
--
(Weitergabe von Adressdaten, Telefonnummern u.ä. ohne Zustimmung
nicht gestattet, ebenso Zusendung von Werbung oder ähnlichem)
-----------------------------------------------------------
Mit freundlichen Grüßen, S. Schicktanz
-----------------------------------------------------------
Christoph 'Mehdorn' Weber
2020-07-11 17:32:10 UTC
Permalink
Hallo!
Post by Sieghard Schicktanz
Ich hab' mir für sowas eine Krücke gebastelt, die mir aus der Prozessliste
die Werte für DISPLAY und den zugehörigrn USER 'raussucht.
Ich schreibe einfach beim Start von X via ~/.xsessionrc das
aktuelle DISPLAY zur späteren Verwendung in eine Datei, die unter
anderem auch von meinen Shells auf der Textkonsole eingelesen
wird. Dann kann ich auch von dort aus bequem X-Programme starten.

Christoph
--
"The Board views the endemic use of PowerPoint briefing
slides instead of technical papers as an illustration of
the problematic methods of technical communication at NASA."
Helmut Waitzmann
2020-03-25 22:30:57 UTC
Permalink
ich habe ein script welches im Hintergrund als root läuft. Es
erstellt unter anderem auch eine html Datei mit dynamischem
Inhalt. Ist es möglich, dass es einem bestimmten, angemeldeten
X11 Benutzer den Browser mit der Seite automatisch ohne zutun des
Benutzers öffnet?
Stefan Wiens hat ja bereits geschrieben, was bei ihm
funktioniert. 

Ich würde es trotzdem nicht tun: 


Eine X11‐Umgebung – besonders bei den Desktop‐Umgebungen
heutzutage – besteht aus mehr als der Umgebungsvariablen
«DISPLAY».  Das könnte also einen nur halblebig an der
Desktop‐Umgebung teilhabenden Chromium zur Folge haben. 

Darüber hinaus möchte ich aber eine grundsätzliche Frage stellen: 
Fändest du es gut, wenn du gerade irgendetwas mit der Maus in ein
Zielfenster ziehen möchtest und kurz, bevor du am Ziel bist und es
fallen lassen willst, platzt dir der Chromium auf den Bildschirm,
zufällig dort, wo dein Mausziel ist.  Da du gerade schon dabei
bist, den Knopf an der Maus loszulassen, kannst du nicht mehr
reagieren:  Das gezogene irgendetwas fällt in den Chromium statt
dort hin, wo du es haben wolltest, und richtet jetzt Schaden an. 

Ich fände das nicht gut. 
Jan Novak
2020-03-26 06:05:43 UTC
Permalink
ich habe ein script welches im Hintergrund als root läuft. Es erstellt
unter anderem auch eine html Datei mit dynamischem Inhalt. Ist es
möglich, dass es einem bestimmten, angemeldeten X11 Benutzer den
Browser mit der Seite automatisch ohne zutun des Benutzers öffnet?
Stefan Wiens hat ja bereits geschrieben, was bei ihm funktioniert.
Fändest du es gut, wenn du gerade irgendetwas mit der Maus in ein
Zielfenster ziehen möchtest und kurz, bevor du am Ziel bist und es
fallen lassen willst, platzt dir der Chromium auf den Bildschirm,
zufällig dort, wo dein Mausziel ist.
Ich schreibe keine Applikation, an der andere Menschen ohne Wissen
arbeiten, sondern nur ein script für "mich". Ich weiss, wann das Script
läuft und dass es gleich aufpoppen wird.

Ich finde es interessant, auf eine technische Frage mit einer Sinn,-
bzw. fast schon philosophisch zu antworten ;-)


Jan
Manfred Haertel
2020-03-26 04:05:30 UTC
Permalink
Post by Jan Novak
DISPLAY=':0'; sudo -u jn chromium $myhtml
funktioniert leider nicht.
Da Du ja leider keine Fehlermeldung nennst, kann ich nur raten:

Am ehesten liegen keine oder die falschen
Authentifizierungs-Informationen vor.

Leider ist das in verschiedenen Linux-Distris recht unterschiedlich
aufgesetzt. Möglicherweise übergibt bei Dir sudo (per PAM) die
Authentifizierungs-Informationen von root an jn, und das willst Du ja
grade nicht.

Beschäftige Dich mal mit xauth. Evtl. reicht sowas wie

XAUTHORIZE=/home/jn/.Xauthority
--
Manfred Härtel, DB3HM mailto:***@rz-online.de
http://rz-home.de/mhaertel
Jan Novak
2020-03-26 06:07:57 UTC
Permalink
Post by Manfred Haertel
Post by Jan Novak
DISPLAY=':0'; sudo -u jn chromium $myhtml
funktioniert leider nicht.
Das ist ja das schlimme. Ich habe keine.
Post by Manfred Haertel
Am ehesten liegen keine oder die falschen
Authentifizierungs-Informationen vor.
Root darf doch alles!?
Post by Manfred Haertel
Leider ist das in verschiedenen Linux-Distris recht unterschiedlich
aufgesetzt. Möglicherweise übergibt bei Dir sudo (per PAM) die
Authentifizierungs-Informationen von root an jn, und das willst Du ja
grade nicht.
Ähhh... doch... root soll demn eingelogten User jn ein Fenster öffnen.
Ich nutze Debian mit Cinnamon.

Jan
Helmut Waitzmann
2020-03-26 15:04:35 UTC
Permalink
Post by Jan Novak
Post by Manfred Haertel
Am ehesten liegen keine oder die falschen
Authentifizierungs-Informationen vor.
Root darf doch alles!?
Bei X11 nicht.  X11 ist für Mehr‐Rechner‐Betrieb ausgelegt, d. h.,
es ist da machbar, dass der Rechner, auf dem der X‐Server läuft
(das ist der Rechner, an dem Tastatur und Bildschirm angeschlossen
sind), ein anderer Rechner ist als der, auf dem beispielsweise der
Chromium läuft.  Da nützt es dem Chromium nichts, dass er unter
der Benutzerkennung «root» läuft.  Der X‐Server lässt ihn nur an
sich ran (beispielsweise, um ein Fenster auf dem Bildschirm zu
zeigen oder Eingaben der Tastatur oder Maus an den Chromium zu
übermitteln), wenn der Chromium den richtigen Ausweis (= die
Autorisierungsdaten) vorzeigt. 
Jan Novak
2020-03-26 16:07:13 UTC
Permalink
Post by Jan Novak
Post by Manfred Haertel
Am ehesten liegen keine oder die falschen
Authentifizierungs-Informationen vor.
Root darf doch alles!?
Bei X11 nicht.  X11 ist für Mehr‐Rechner‐Betrieb ausgelegt, d. h., es
ist da machbar, dass der Rechner, auf dem der X‐Server läuft (das ist
der Rechner, an dem Tastatur und Bildschirm angeschlossen sind), ein
anderer Rechner ist als der, auf dem beispielsweise der Chromium läuft.
Da nützt es dem Chromium nichts, dass er unter der Benutzerkennung
«root» läuft.  Der X‐Server lässt ihn nur an sich ran (beispielsweise,
um ein Fenster auf dem Bildschirm zu zeigen oder Eingaben der Tastatur
oder Maus an den Chromium zu übermitteln), wenn der Chromium den
richtigen Ausweis (= die Autorisierungsdaten) vorzeigt.
Ah... verstehe. Das erlklärt einiges.
Danke.

Jan
Lesen Sie weiter auf narkive:
Loading...