expertenaustausch > comp.os.* > comp.os.unix.shell

Jan Novak (25.03.2020, 21:06)
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 (25.03.2020, 22:27)
Jan Novak <repcom> writes:

> 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?

> Ü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 &
Helmut Waitzmann (26.03.2020, 00:30)
Jan Novak <repcom>:

>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. 
Manfred Haertel (26.03.2020, 06:05)
Jan Novak schrieb:

> 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
Jan Novak (26.03.2020, 08:05)
Am 25.03.20 um 23:30 schrieb Helmut Waitzmann:
> Jan Novak <repcom>:
> Stefan Wiens hat ja bereits geschrieben, was bei ihm funktioniert.
> Ich würde es trotzdem nicht tun:
> 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.


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
Jan Novak (26.03.2020, 08:07)
Am 26.03.20 um 05:05 schrieb Manfred Haertel:
> Jan Novak schrieb:
>> DISPLAY=':0'; sudo -u jn chromium $myhtml
>> funktioniert leider nicht.

> Da Du ja leider keine Fehlermeldung nennst, kann ich nur raten:


Das ist ja das schlimme. Ich habe keine.

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


Root darf doch alles!?

> 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
Jan Novak (26.03.2020, 08:19)
Am 25.03.20 um 21:27 schrieb Stefan Wiens:
> Jan Novak <repcom> writes:
> Was funktioniert denn nicht? Fehlermeldung?
> 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 (26.03.2020, 08:45)
Am 26.03.20 um 07:19 schrieb Jan Novak:
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.


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 (26.03.2020, 17:04)
Jan Novak <repcom>:
>Am 26.03.20 um 05:05 schrieb 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?Serverlä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. 
Helmut Waitzmann (26.03.2020, 18:00)
Jan Novak <repcom>:

>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 <jn@localhost>.  Sind dort Fehlermeldungen
angekommen? 

>Ü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. 

>mit :0 nicht, wenn ich das script direkt starte.


«:0» ist ebenfalls korrekt. 
Jan Novak (26.03.2020, 18:05)
Am 26.03.20 um 17:00 schrieb 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).

Jan
Jan Novak (26.03.2020, 18:07)
Am 26.03.20 um 16:04 schrieb Helmut Waitzmann:
> Jan Novak <repcom>:
> 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
Helmut Waitzmann (26.03.2020, 21:44)
Jan Novak <repcom>:
>Am 26.03.20 um 17:00 schrieb Helmut Waitzmann:


>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 (26.03.2020, 22:26)
Hallo Jan,

Du schriebst am Thu, 26 Mar 2020 17:05:14 +0100:

> Am 26.03.20 um 17:00 schrieb Helmut Waitzmann:
> 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...)

--
Jan Novak (27.03.2020, 11:23)
Am 26.03.20 um 21:26 schrieb Sieghard Schicktanz:

[..]
> }
> # 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.

> 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

Ähnliche Themen