neděle 26. září 2010

Spouštění grafických aplikací na vzdáleném počítači přes SSH

K tomuto tématu jsem se dostal tak, že jsem potřeboval přenášet ze vzdáleného počítače obraz z web kamery a protože jinak pro komunikaci s externími počítači používám převážně ssh, začal jsem manuálem tohoto programu. Nejsem žádným síťovým odborníkem, jen popíši, co používám a co mám vyzkoušeno. ...


Základem je mít nainstalován ssh server na vzdáleném počítači, na který se chcete připojit, ssh klient je naopak v Ubuntu již v základní instalaci.

$ sudo apt-get install openssh-server

Počítač, na který se chcete připojit přes internet, musí mít veřejnou adresu, pokud je za routrem, který veřejnou adresu má, je nutné přesměrovat port, na kterém komunikuje ssh (defaultně port 22) na konkrétní počítač.

Základní použití pro přihlášení na vzdálený počítač:

$ ssh user@192.168.1.150

Na tom není co řešit, přihlásíte se jako uživatel user zadáním přihlašovacího hesla, na počítač v lokální síti s IP 192.168.1.150.

Pokusíte-li se nyní spustit nějakou grafickou aplikaci, dostanete chybové hlášení, že program nemohl otevřít display. Je to tím, že nebyla nastavena systémová proměnná $DISPLAY, která odkazuje na aktuální zobrazovací zařízení. Základní display má označení :0.0 a pokud se má aplikace zobrazit na něm, stačí definovat tuto proměnnou:

$ export DISPLAY=:0.0

Budete-li chtít spouštět grafické aplikace na vzdáleném počítači, ale s výstupem na monitor počítače, ze kterého se přihlašujete, použijete při přihlašování přepínač -X (popřípadě -Y) pro přesměrování X11. A pokud je upload vzdáleného počítače limitován (např. 512kb/s je zoufale málo) je vhodné přidat kompresi přenášených dat přepínačem -C.

$ ssh -XC user@192.168.1.150

Po přihlášení by se měla grafická rozhraní spouštěných programů zobrazovat na vašem lokálním monitoru a proměnná $DISPLAY bude mít zhruba tento obsah: localhost:10.0 . Za mezeru můžete dopsat rovnou příkaz, který se má po přihlášení spustit, po jeho ukončení se pak ukončí i spojení. Například si pustím obraz ze zmíněné web kamery:

$ ssh -XC user@192.168.1.150 mplayer tv:// -tv driver=v4l2:width=176:height=144:device=/dev/video0 -quiet

Přenáším video o rozlišení 176x144 bodů a sotva se to na 512kb lince hýbe. Použití komprese je v tomto případě daleko menším přínosem, než u běžných aplikací, ale stále se vyplatí (závisí i na rychlosi vzdáleného počítače). Je to samozřejmě bez zvuku, lepším řešením je streamovat video se zvukem třeba pomocí vlc, které je k tomu přímo stvořené, a připojit se přímo přehrávačem.


Pár odkazů k problematice ssh:
http://wiki.ubuntu.cz/SSH

2 komentáře:

  1. Nějak to nefunguje ...

    pepe@PC-Pepe:~$ ssh plysacek@ruzka
    plysacek@ruzka's password:
    Linux NB-plysacek 2.6.32-3-486 #1 Thu Feb 25 05:35:13 UTC 2010 i686

    The programs included with the Debian GNU/Linux system are free software;
    the exact distribution terms for each program are described in the
    individual files in /usr/share/doc/*/copyright.

    Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
    permitted by applicable law.
    You have new mail.
    Last login: Mon Mar 7 09:45:09 2011 from 192.168.111.2
    plysacek@NB-plysacek:~$ export DISPLAY=:0.0
    plysacek@NB-plysacek:~$
    plysacek@NB-plysacek:~$ leafpad
    No protocol specified
    leafpad: Nelze otevřít displej:
    plysacek@NB-plysacek:~$


    Pepe cz3dtc@seznam.cz

    OdpovědětVymazat
  2. Na systému, na kterém spouštíš grafický program, musí běžet X server, to je základní předpoklad, jinak mě toho z uvedeného bohužel moc nenapadá. Spouštění grafického programu na vzdáleném počítači ale dává zpravidla větší smysl s přesměrováním X na lokální monitor..

    OdpovědětVymazat

Zkuste prosím při komentováni používat místo volby Anonymní volbu Název/adresa URL, kde vyplníte nějakou přezdívku, adresu zadávat nemusíte. Vědět, které příspěvky jsou od jednoho člověka, je fajn. Díky.

Pokud by se vám náhodou odeslaný komentář na stránce nezobrazil, vytáhnu ho z koše hned jak si toho všimnu. I Google spam filter se občas sekne.