ssh és X (gui futtatása távoli gépen)

Fórumok

Sziasztok!

Remélem nem lerágott csont még, de nem tudom hogy mire keressek rá.
Adott két gép, mindkettő fent csücsül az interneten. Az egyik a laptopom, a másik egy usernek titulált desktop gép.
Szeretnék ssh-n keresztül programot futtatni a laptopról indítva a useren, de úgy, hogy a grafikus felület is a useren jelenjen meg.
Addig már eljutottam, hogy ssh-val bejelentkezek a userre, de programot még nem sikerült így indítanom.
(Azt szeretném, hogy elindítva egy képnéző programot, távolról meg tudjak jeleníteni a monitoron egy általam scp-vel átküldött képet, de user felöli felhasználói beavatkozás nélkül).
Tudtok valami ötletet adni?

Köszönettel
Krisz

Hozzászólások

félreértelmeztem

szóval: vnc over vpn pl.

én konkrétan muter otthoni gépét szoktam így "debug"-olni. nála tightvnc+hamachi van, nálam xp-n/vistá-n dettó, debianon meg hamachi+hamachi-gui+vinagre

meglepően keveset kell vele tökölni, szerintem elég jó megoldás, ha az ember nem elsőre csinálja, kb. 15 perc alatt összedobható komolyabb "szakmai" tudás nélkül

A kérdés egyszerűbb lenne, ha távoli programot akarnál futtatni a laptopon úgy, hogy az ablak is a laptopon jelenjen meg.

Így viszont azt tudom mondani, hogy ssh-zásnél ne használd az X és az Y kapcsolókat. Bejelentkezés után pedig megfelelően paraméterezve indíts konzólból egy programot. Nekem kettő jut így eszembe képek megjelenítésére. Az egyik az "xv". A másik egy megfelelően paraméterezett firefox (file:///...).

Üdv,
Dw.

"Jegyezze fel a vádhoz - utasította Metcalf őrnagy a tizedest, aki tudott gyorsírni. - Tiszteletlenül beszélt a feljebbvalójával, amikor nem pofázott közbe."

Köszönöm, ez lesz az enyém.. Nem fog nyafizni a $DISPLAY változó miatt? Mert eddig akárhányszor ilyesmivel próbálkoztam, mindig belefutottam ebbe. Kipróbálni sajnos már csak holnap tudom, ezért szeretném körbejárni az esetleges buktatókat.

És igen, köszönöm a gyors válaszokat! :)

Krisz

Hát én még gondolnék kiadni egy export DISPLAY=:0 -át. És utána :)

(Szerintem valahogy így:)

ssh masik_user@távoligép

(ott kiadva:)

xhost +

(vagy)

xhost local

(aztán)

DISPLAY=:0.0 xterm -e 'echo "HELLO"; sleep 3'
DISPLAY=:0.0 xv kep.jpg

En igy csinalnam:

$ # ssh local forward-dal (-C - compress, mert a X szoszatyar)
$ ssh -C -L6001:user:6000 username@user
$ # a fenti ssh izet akar az ~/.ssh/config-ba be lehet irni

$ # vagy igy:
$ export DISPLAY=:1.0
$ kepnezosw
$ # avagy
$ kepnezosw -display :1.0 kep.jpg

valamint ezt megelozoen a user gepen az X-et futtato user neveben biztositani kell a hozzaferest 'xhost +', vagy 'xhost +username' alakban

Nem kell atmasolni a kepet, minden a te gepeden fut, kiveve a megjelenitest.

Ha shell-t akarsz kozosen hasznalni a tavoli user-rel, akkor az expect alapu kibitz ill. xkibitz-el lehet
olyat csinalni, hogy mindket gepen fut xterm+sh es mindketten latjatok amit a masik gepel!

NA, alakul a dolog. Viszont még mindig erősen gubancos.

:~$ export DISPLAY=:0.0
:~$ echo $DISPLAY
:0.0

:~$ xhost local
Xlib: connection to ":0.0" refused by server
Xlib: No protokol specified

xhost: unable to open display ":0.0"

ha meg arra gondolok, hogy talán nem a "nullás" a képernyő:
:~$ export DISPLAY=:1.0
:~$ echo $DISPLAY
:1.0

:~$ xterm -e 'echo "HELLO";'
xterm Xt error: Can't open display: :1.0

Hát ez az amitől tartottam én..
Ja, és alapból nincs beállítva a $DISPLAY változó, mert üres sort ad vissza. Pedig megy az X.

Krisz

u.i.: Hogy egyértelmű legyen a dolog: Nincs grafikus csillivilli, mert lassú a távoli gép nete. Működik, de tetű lassú. Ezért kellene konzolos megoldás, hogy azon a gépen tudjak indítani konzolból graf. programot.
Nézegetni nem akarom, elég a tudat hogy aki előtte ül, az látja.

Én ezt nem vágom. A távoli gépen is, meg az enyémen is a root nevében fut az X, ahogyan az az alapbeállítás. Ubuntu Hardy-ról van szó.
Akkor ezt kellene?

krisz:~$ xhost +root
xhost: Bad hostname "root"
krisz:~$ sudo xhost +krisz
sudo: password for krisz:
xhost: Bad hostname "krisz"

Nem értem. Mit kellene csinálnia ennek az xhost-nak?

root-ként:

# export DISPLAY=:0.0
# xhost +
No protocol specified
xhost: unable to open display ":0.0"
#
# xclock
No protocol specified
Error: Can't open display :0.0

Még az előttem lévő gépen sem megy. Nemhogy konzolból, de még xterm alatt is ugyanezt mondja. Valamit még be kellene itt állítanom nem?

,,

xhost +

''-t az X-szerveren adjuk ki, azaz azon a helyi gépen, amelyiknek a kijelzője előtt ülünk. Merthogy erre a kijelzőre (X-szerverre) fog csatlakozni a kliens.

,,

export DISPLAY=szerver.valami:0.0

''-t pedig a távoli gépen, mert ebből a változóból tudják a programok, hogy hova kell csatlakozniuk.

Bocs, most látom, hogy régi. :)

Az egyik a távoli elérés, amihez elegendő egy ssh és parancssori megjelentő, ami feh.
http://www.linux.com/feature/55737

Nem teljesen idevágó de hasonló céllal már csináltak hasonlót sokan.

http://alnino2005.googlepages.com/15%22diydigitalpictureframe
http://linuxbasement.com/content/digital-picture-frame-howto
http://www.adamfranco.com/archives/3
http://tuxmobil.org/laptop_digital_picture_frame_with_linux.html

Ez érdekes. Közben kísérletezek a dologgal, és rájöttem valamire.
Ha konzolból adom ki az xhost + parancsot, akkor eldobja root-ként, és userként is. Ha viszont xterm-be írom be userként (ugye xterm már graf-módban van, és ismeri a $DISPLAY-t is magától), akkor "acces control disabled, clients can connect from any host" üzenettel válaszol, és innentől működik mindenhol.
Persze csak kicsit vagyok előrébb, mert ez a helyi gépemen van így. A távolin még valahogy össze kell varázsolni azt, amit az xterm csinált nekem.

Sajnos ma már nincs több időm, mert menni kell dolgozni, de holnap még megint előveszem a dolgot.
Köszönöm az eddigi segítséget is!

Krisz

A megoldás kliens oldalon:
xinit -exec ssh -X -i ${kulcs} ${user}@${szerver} exec ${ablakkezelo} -- :1

rem_user:~$ xinit -exec ssh -X rem_user(kukac)my_host.dyndns.org exec gdm -- :1
X: user not authorized to run the X server, aborting.
xinit: Server error.

Honnan veszem a $(kulcs)-ot? Nem az igazi ez kérem. :(
Jó lenne nekem az xhost-os változat is, csak tudi kellene hogy mit kell még neki beállítani.

Krisz

Valakinek működik ez a dolog egyáltalán?
Mármint hogy átvált Ctrl+Alt+F1-el konzolba, és onnan elindít valami grafikusat mondjuk az xclock-ot..

Nekem valamiért mindig azt mondja, hogy
Xlib: connection to ":0.0" refused by server
Xlib: No protocol specified
xhost: unable to open display ":0.0"

Mit kellene beállítani az xorg-nak, hogy engedjen hozzáférést? Elég lenne a localhost-on, mert úgyis helyi userként jelentkezek be.

Igen, nyusziful, nekem es meg millioknak mukodik. A dolog elemei:

- remote (X-et futtato) oldalon a kivant user adja ki az 'xhost +' parancsot
- remote oldalon sshd_config -ban az X11Forwarding legyen yes
- remote oldalon az ssh legyen beengedve

- local oldalrol bejelentkezes utan:
- legyen helyesen beallitva a DISPLAY valtozo (export DISPLAY=:0.0")

Tovabbi segitseget a 'ssh -v -X xterm' altal kiirt hibauzenetek adhatnak. (A biztonsag kedveert nezd meg egy normalisan lefuto, nem X-es parancs kimenetet is.)

ssh -X remotehost 'sudo su - remoteuser -c (xhost +; export DISPLAY=:0.0; xmessage hello)'

Most probaltam ki (AIX shell -> Linux GUI), mukodik! Dob egy hibat, de az kit erdekel...
Pontosabban nalam a sudo nem volt benne, mert azonos userrel futtattam.

Ha tudod 'remoteuser' jelszavat, meg sudo se kell, csak en altalaban olyanoknak csinalom, akinek nem tudom a jelszavat ;-)

ssh szerveren:
/etc/ssh/sshd_config-ba
X11Forwarding yes
(restart)

ssh kliensen:
~/.ssh/config-ba
ForwardX11 yes

xterm parancssorból be-ssh-zol a szerverre,
parancssorból (de már a szerver parancssorából)
valami kis X-es progi, pl.

xosview

megjelenik (a kliens X szerverén). Nem túl bonyolult.
--
CCC3

Csak nem akar ez menni :(

Beállításokban X11forward megvan, ssh-zok a szerverre, majd xclock és megjelenik a saját képernyőmön az óra.

Azt hiszem fel fogom adni. Ennyit nem ér az egész.

Köszi a hozzászólásokat, valszeg az én rendszeremben van a bibi.

Krisz

Ja, bocs lehet hogy neked azért nem meg így, mert a távoli gépen az X nem a 0.0-án fut. Ezt úgy lehet megnézni, hogy mégnézed pl. a /var/log/Xorg.?.log -ot és akkor abból kitalálod látod hogy mennyi a server/screen száma. Nálam volt olyan hogy X újarindítása után az X nem az 0.0 -n hanem az 1.0 -án ébredt fel. Ha úgy van beállítva, akkor az is lehet hogy 0-ás screen nincs is hanem csak 1-es (vagy 2-es stb.) Ekkor az DISPLAY=0.1 (vagy 0.2) a nyerő. Ezt vagy a /etc/X11/xorg.conf -ból vagy a /var/log/Xorg.?.log -ból lehet látni (az elején kiírja milyen screenekre indul el)

Annak gyakorlati haszna van, ha egy távoli gépen futó program a saját képernyőmön látszik. A fordított irány viszont csak vicc. Nehezebb, mint a 'normális', használat, mert nem erre vannak beállítva a dolgok, pl. valószínű, hogy a távoli gép letiltja. Aki trükközni akar, az törje a fejét.
--
CCC3

Igen, az egyik magától megy, a másikhoz ügyeskedni kell, ha nehezen értenéd, hogy miről van szó. Ezenkívül, jogosultság próblémák is vannak. Pl. nem szeretném, ha munka közben mindenféle vicces ablak bukkanna fel. Tehát ha észrevenném, hogy nincs letiltva az ilyesmi, akkor letiltanám.
--
CCC3

Bocsi felreertettelek korabban.
Ha azt akarod, hogy a server gep egy bizonyos felhasznalojanak grafikus feluleten jelenjen meg az altalad inditot program GUI-ja nem kell semmi ugyeskedes az ssh-val. Egyszeruen csak felepsz a gepre, ha tudod a felhasznalo jelszavat akkor su-val atlepsz hozza, majd:
xhost +
export DISPLAY=${FELHASZNALO_ALTAL_HASZNALT_DISPLAY}
#csh-eseten setenv DISPLAY ${FELHASZNALO_ALTAL_HASZNALT_DISPLAY}
Majd egyszeruen elinditod a programot amit futatni szeretnel.

Irtó sok xhost+ javaslat volt itt, amit azért általában ellenjavallani szoktak (nehogy haxor@evil.com is elindítsa a saját kis X-es programját a nagy liberalizmusban.)

Az én kis tippem inkább a következő lenne:
ssh remoteuser_running_X@remotehost.internets.hu.
export DISPLAY=:0.0
find / -iname "avi" -exec mplayer '{}' \;

A :0.0 csak olyan vagdalkozás agy nélkül, biztos lehet szebben hasonló hibaszázalékkal működőt mondani.
Ha ugyanazzal a usernévvel jelentkezel be, mint aki az X-et bámulja, akkor nem kell xhostolni.

EEEEzazezazezaz!!!!!

Köszönöm szépen, így már nagyon frankón működik!!!!

Krisz

Nem olvastam végig minden hozzászólást, bocs a van már ilyen.

Csak annyi, hogy épp most csináltam ilyet, vncserver programmal szerveroldalon, kliensoldalon pedig thightvnc-vel és így rögtön a vncserver-t futtató user grafikus asztalát kaptam. Működik rendesen, semmi gondom vele.

--
Keep it simple, stupid.

Köszönöm Neked is a hozzászólást, de nekem nem erre volt szükségem. Nem a user desktopját akartam "elorozni", csak megjeleníteni egy program kimenetét nála, ami program nála fut le.
Ha vnc-zek, akkor az kb 100kb/s adatforgalmat jelent ha tömörítek is (30Kb az internet sávszélessége), így viszont csak a parancsot kell átvinnie ssh-n.
Szóval a probléma megoldva, és köszönet ismét mindenkinek érte!

Krisz

sudo cat ~victimuser/.Xauthority >> ~/.Xauthority

~~~~~~~~
De ezt az egy lépést ki nem tevé,
Az nem tett semmit, nem tud semmit is.