Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

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

Alles rund um die verschiedenen Konsolen und shells sowie die Programmierung unter Linux

Moderator: Moderatoren

Antworten
lcd
Newbie
Newbie
Beiträge: 27
Registriert: 27. Mai 2004, 15:51

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

Beitrag von lcd »

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?
lcd
Newbie
Newbie
Beiträge: 27
Registriert: 27. Mai 2004, 15:51

Beitrag von lcd »

ich wäre da für tips dankbar
oder hat hier auch keiner eine idee oder ist das zu einfach ?
Benutzeravatar
migo
Member
Member
Beiträge: 66
Registriert: 25. Aug 2004, 21:10
Wohnort: Hamburg

Beitrag von migo »

...würde mich auch interessieren, schließe mich an.

Micha
--------------------------------------------------------------------------------------
Asus P4P800 Deluxe, P4 2,6 GHz, 2x 512 MB, ATI 9600 Pro
--------------------------------------------------------------------------------------
Benutzeravatar
oc2pus
Ultimate Guru
Ultimate Guru
Beiträge: 6506
Registriert: 21. Jun 2004, 13:01

Beitrag von oc2pus »

Variante 1:
sux -c programm

Variante 2:
xhost +localhost (als user abschicken)
dann su -c "programm parameter"
Zuletzt geändert von oc2pus am 23. Dez 2004, 20:31, insgesamt 1-mal geändert.
tell people what you want to do, and they'll probably help you to do it.
PackMan
LinWiki : Das Wiki für Linux User
lcd
Newbie
Newbie
Beiträge: 27
Registriert: 27. Mai 2004, 15:51

Beitrag von lcd »

vielen dank für die hilfe nun klappt es wunderbar
Benutzeravatar
migo
Member
Member
Beiträge: 66
Registriert: 25. Aug 2004, 21:10
Wohnort: Hamburg

Beitrag von migo »

...äääh,

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

Micha
--------------------------------------------------------------------------------------
Asus P4P800 Deluxe, P4 2,6 GHz, 2x 512 MB, ATI 9600 Pro
--------------------------------------------------------------------------------------
Benutzeravatar
oc2pus
Ultimate Guru
Ultimate Guru
Beiträge: 6506
Registriert: 21. Jun 2004, 13:01

Beitrag von oc2pus »

migo hat geschrieben:...äää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 ?????
tell people what you want to do, and they'll probably help you to do it.
PackMan
LinWiki : Das Wiki für Linux User
Benutzeravatar
niks
Newbie
Newbie
Beiträge: 1
Registriert: 13. Dez 2004, 22:50

Beitrag von niks »

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
Benutzeravatar
migo
Member
Member
Beiträge: 66
Registriert: 25. Aug 2004, 21:10
Wohnort: Hamburg

Beitrag von migo »

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: Alles auswählen

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
--------------------------------------------------------------------------------------
Asus P4P800 Deluxe, P4 2,6 GHz, 2x 512 MB, ATI 9600 Pro
--------------------------------------------------------------------------------------
Benutzeravatar
oc2pus
Ultimate Guru
Ultimate Guru
Beiträge: 6506
Registriert: 21. Jun 2004, 13:01

Beitrag von oc2pus »

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_w ... 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...
tell people what you want to do, and they'll probably help you to do it.
PackMan
LinWiki : Das Wiki für Linux User
Benutzeravatar
migo
Member
Member
Beiträge: 66
Registriert: 25. Aug 2004, 21:10
Wohnort: Hamburg

Beitrag von migo »

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
--------------------------------------------------------------------------------------
Asus P4P800 Deluxe, P4 2,6 GHz, 2x 512 MB, ATI 9600 Pro
--------------------------------------------------------------------------------------
Antworten