• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

per shell script ein programm starten was unter X läuft

lcd

Newbie
ich habe da ein problem
ich versuche per shell script ein programm zu starten was eine grafischeoberffläche hat.
fehlermeldung: cannot connect to X server
wenn ich mich per VNC auf die kiste schalte und per konsole den gleichen befehl ein gebe get es wunderbar.

hat da jemand eine Ahnung was ich da machen kann um das programm aus einen shellscript zu starten?
 
OP
L

lcd

Newbie
ich wäre da für tips dankbar
oder hat hier auch keiner eine idee oder ist das zu einfach ?
 

oc2pus

Ultimate Guru
Variante 1:
sux -c programm

Variante 2:
xhost +localhost (als user abschicken)
dann su -c "programm parameter"
 

migo

Member
...äääh,

sorry, hab's noch nicht gecheckt :cry:
Was ist sux? Könnt ihr mir das nochmal langsam sagen... :cry:

Micha
 

oc2pus

Ultimate Guru
migo schrieb:
...äääh,

sorry, hab's noch nicht gecheckt :cry:
Was ist sux? Könnt ihr mir das nochmal langsam sagen... :cry:

ggggaaaaaannnnnnzzzzzz lllllaaaannnnngggggsssssaaaaammmmm, eeeexxxxttttrrrrraaaa fffffüüüürrrrr ddddiiiiiccccchhhhh:

starte das Programm mit sux <programmname>.
Beispiel: sux kwrite

oder
starte das Programm mit kdesu <programmname>.
Beispiel: kdesu kwrite

oder
öffne eine Konsole:
gib dort ein: xhost +localhost
drücke jetzt auf die <EINGABE-TASTE> (das ist die mit dem Haken, manchmal steht auch ENTER drauf!!)
jetzt tippst du dein root-Passwort ein und drückst wieder auf diese EINGABENTASTE
dann gibst du den Programmnamen ein und drückst nochmal auf die EINGABE-TASTE.

wwwwaaarrrrr ddddaaaaassss jjjjjjeeeeetttttzzzzzzttttt iiiiiimmmmmeeeeerrrrrr nnnnnoooooccccccchhhhhh zzzzzuuuuuu sssssccccchhhhhnnnneeeeelllll ?????
 

niks

Newbie
xhost +localhost<Enter>
meinsuperpasswort<Enter>
bash: meinsuperpasswort: command not found
:cry: Malen nach Zahlen. :cry:


Das X protokoll ist netzwerktransparent
X-Server: Da wo dein Bildschirm läuft.
X-Client: Ist dein Program mit grafikoberfläche.
X-Display: Die Umgebungsvariable DISPLAY gibt an auf welchem X-Server das X-Client program angezeigt werden soll. "echo $DISPLAY" in der konsole zeigt wohin der X-Client verbindet. "export DISPLAY=servername:0.0" stetzt das Display, für lokale verbindungen nimmt man "localhost:0.0"
X-Client authentication: Der X-Server muss eine Verbindung des X-Clients zulassen. Mit xauth (der client/user muss das richtige cookie haben) oder xhost (jeder user von auf server a kann den x server auf server b connecten, unsicher) werden X-Clients zugelassen.
X-Forwarding: Mit "ssh -X", falls vom ssh server unterstützt, kann man sich die X verbinungen verschlüsselt auf den eigenen X-Server tunneln lassen. ssh setzt $DISPLAY dann selbständig

Google ist dein freund. suche nach: "linux DISPLAY X-Client"

Gruss
nik
 

migo

Member
oc2pus,

danke für deine Geduld.

Also:

1) Die Sache mit kdesu kannte ich, klappt auch in der Konsole, aber im Shellskript ohne Eingabe des Passwortes? Wohl nur, wenn in mit visudo etwas herumspiele, oder?

2) Mit z.B. "sux kwrite" erhalte ich die Meldung
Code:
micha@linux:~> sux kwrite
id: kwrite: Einen solchen Benutzer gibt es nicht
su: Benutzer kwrite existiert nicht
Geht irgendwie nicht.

3) Die Sache mit xhost +localhost usw. war mir auch bekannt, würde aber das gleiche Problem wie in 1) geben, oder?

Micha
 

oc2pus

Ultimate Guru
ad sux:
das war typo von mir, syntax:
Usage: sux [-c command] [-s shell] [-|-l] [[user] args]

dann probiere folgendes
a) starte dein script als user root mit su -c "script"
jetzt laufen alle Befehle des scripts unter dem user root.
mit -s /bin/bash oder -s /bin/sh kannst du auch noch die gewünschte shell vorgeben für die Ausführung des Scriptes (siehe man su)

b) oder folgendes Verfahren:
Quelle: http://www.suse.de/cgi-bin/print_page_www.pl?NPSPath=/webredesign/htdocs/de/private/support/online_help/howto/root_user/index.html
Zugriff auf den X-Server

Wer nun versucht, ein X-Programm zu starten, wird bitter enttäuscht werden, denn auch "root" darf nicht ohne weiteres einen fremden X-Server als Ausgabemedium mißbrauchen - dies muß zuvor der User gestatten. Die eigenen "Schlüssel" hierzu liegen in der Datei ~/.Xauthority und können über xauth list eingesehen werden. Will nun ein anderer User (in diesem Fall "root") auf unseren X-Server zugreifen, so benötigt er einen passenden Schlüssel: Diesen kann der User mit dem Befehl xauth extract schlüssel $DISPLAY in einer Datei (in diesem Beispiel schlüssel) abspeichern, und "root" mit dem Befehl xauth merge schlüssel dauerhaft seiner ~/.Xauthority hinzufügen.

Doch noch immer kann kein X-Programm gestartet werden, denn diesem muß erst noch mitgeteilt werden, welches Display verwendet werden soll. Hierfür sorgt die Shellvariable DISPLAY (vgl. man X), die "root" noch setzen muß (z.B. durch die Eingabe von DISPLAY=:0.0; export DISPLAY). Ein Beispiel, bei dem der Dateimanager X-Files mit Rootrechten in einer User-X-Session genutzt werden soll:

jo@planet ~> xauth extract xauth_jo $DISPLAY
jo@planet ~> su -
Password:
root@planet:~> xauth merge /home/jo/xauth_jo
xauth: creating new authority file /root/.Xauthority
root@planet:~> DISPLAY=:0.0; export DISPLAY
root@planet:~> X-Files
Starting X-Files...

Will man diese Einstellungen nicht jedesmal neu vornehmen, sondern automatisch setzen lassen, so bietet sich für die Shellvariable $DISPLAY des Users root die Datei /root/.bashrc an (sofern die Bash verwendet wird). Der Schlüssel selber bleibt für künftige Sitzungen erhalten.

Da "root" jedoch die Daten des Users lesen kann, ist in diesem Fall ein auslesen, transportieren und einfügen des Schlüssels nicht erforderlich - so ist es möglich, statt dem Ex- und Importieren einfach die gesamte Datei ~/.Xauthority des Users zu übernehmen. Beispiel:

jo@planet ~> su -
Password:
root@planet:~> cp /home/jo/.Xauthority /root/
root@planet:~> DISPLAY=:0.0; export DISPLAY
root@planet:~> X-Files
Starting X-Files...

Weniger dramatisch als das Kopieren oder Importieren fremder Zugangsdaten ist das Setzen der Umgebungsvariablen XAUTHORITY, die "root" einfach auf die .Xauthority des Users zeigen lassen kann. Allerdings muß bei dieser Methode die Variable bei jedem Wechsel zum Rootaccount erneut gesetzt werden (vgl. $DISPLAY):

jo@planet ~> su -
Password:
root@planet:~> XAUTHORITY=/home/jo/.Xauthority; export XAUTHORITY
root@planet:~> DISPLAY=:0.0; export DISPLAY
root@planet:~> X-Files
Starting X-Files...
 

migo

Member
Danke!

Das war nun sehr ausführlich, aber man ahnt ja garnicht, wie kompliziert so ein kleines Problem werden kann... :cry:

Ich denke, damit sind alle Fragen zu dem Thema komplett beantwortet (kann man ja direkt als Howto verwenden)

Micha
 
Oben