GNU/Linux >> Znalost Linux >  >> Linux

Ssh – Otevřete okno na vzdáleném displeji X (proč „nelze otevřít displej“)?

Kdysi dávno,

DISPLAY=:0.0 totem /path/to/movie.avi

po připojení ssh na plochu z mého notebooku by se totem přehrál movie.avi na mé ploše.

Nyní zobrazuje chybu:

No protocol specified
Cannot open display:

Přeinstaloval jsem Debian Squeeze, když byl stabilní na obou počítačích, a myslím, že jsem porušil konfiguraci.

Tohle jsem googlil a za život nemůžu přijít na to, co mám dělat.

(VLC má rozhraní HTTP, které funguje, ale není tak pohodlné jako ssh.)

Stejný problém nastává, když se to pokouším spustit z úlohy cron.

Přijatá odpověď:

(Přizpůsobeno z Linuxu:wmctrl nemůže otevřít zobrazení, když je relace zahájena přes ssh+screen)

ZOBRAZENÍ a AUTORITA

Program X potřebuje dvě informace, aby se mohl připojit k displeji X.

  • Vyžaduje adresu displeje, která je obvykle :0 když jste přihlášeni místně nebo :10 , :11 , atd., když jste přihlášeni vzdáleně (ale počet se může změnit v závislosti na tom, kolik X připojení je aktivních). Adresa displeje je normálně uvedena v DISPLAY proměnná prostředí.

  • Vyžaduje heslo pro zobrazení. Hesla pro zobrazení X se nazývají magické soubory cookie . Magic cookies nejsou specifikovány přímo:jsou vždy uloženy v X autoritních souborech, které jsou sbírkou záznamů ve tvaru „zobrazit :42 má cookie 123456 “. Soubor autority X je normálně označen v XAUTHORITY proměnná prostředí. Pokud $XAUTHORITY není nastaveno, programy používají ~/.Xauthority .

Pokoušíte se jednat s okny zobrazenými na ploše. Pokud jste jedinou osobou, která používá svůj stolní počítač, je velmi pravděpodobné, že zobrazovaný název je :0 . Najít umístění souboru autority X je těžší, protože s gdm, jak je nastaveno pod Debian squeeze nebo Ubuntu 10.04, je v souboru s náhodně generovaným názvem. (Předtím jste neměli žádný problém, protože dřívější verze gdm používaly výchozí nastavení, tj. soubory cookie uložené v ~/.Xauthority .)

Získání hodnot proměnných

Zde je několik způsobů, jak získat hodnoty DISPLAY a XAUTHORITY :

  • Relaci obrazovky můžete systematicky spouštět z vašeho počítače, třeba automaticky ve vašich přihlašovacích skriptech (z ~/.profile; ale proveďte to pouze v případě, že se přihlašujete pod X:otestujte, zda DISPLAY je nastavena na hodnotu začínající : (to by mělo zahrnovat všechny případy, se kterými se pravděpodobně setkáte)). V ~/.profile :

    case $DISPLAY in
      :*) screen -S local -d -m;;
    esac
    

    Poté v relaci ssh:

    screen -d -r local
    
  • Můžete také uložit hodnoty DISPLAY a XAUTHORITY v souboru a vyvolat hodnoty. V ~/.profile :

    case $DISPLAY in
      :*) export | grep -E '(^| )(DISPLAY|XAUTHORITY)=' >~/.local-display-setup.sh;;
    esac
    

    V relaci ssh:

    . ~/.local-display-setup.sh
    screen
    
  • Mohli byste zjistit hodnoty DISPLAY a XAUTHORITY z běžícího procesu. To je těžší automatizovat. Musíte zjistit PID procesu, který je připojen k displeji, na kterém chcete pracovat, a poté získat proměnné prostředí z /proc/$pid/environ (eval export $(</proc/$pid/environ tr \0 \n | grep -E '^(DISPLAY|XAUTHORITY)=') ¹).

Související:Existují nějaké otevřené / neomezené rádiové frekvence, které jsou zdarma pro jakékoli použití?

Kopírování souborů cookie

Dalším přístupem (podle návrhu Arrowmastera) je nepokoušet se získat hodnotu $XAUTHORITY v relaci ssh, ale místo toho, aby relace X zkopírovala soubory cookie do ~/.Xauthority . Protože se soubory cookie generují pokaždé, když se přihlásíte, není problém, pokud v ~/.Xauthority ponecháte zastaralé hodnoty .

Pokud je váš domovský adresář přístupný přes NFS nebo jiný síťový souborový systém, který umožňuje vzdáleným správcům zobrazit jeho obsah, může dojít k bezpečnostnímu problému. Stále se budou muset nějak připojit k vašemu počítači, pokud jste nepovolili připojení X TCP (Debian je má ve výchozím nastavení vypnuté). Takže pro většinu lidí to buď neplatí (žádné NFS), nebo to není problém (žádná připojení X TCP).

Chcete-li zkopírovat soubory cookie, když se přihlásíte do relace X počítače, přidejte následující řádky do ~/.xprofile nebo ~/.profile (nebo nějaký jiný skript, který se přečte, když se přihlásíte):

case $DISPLAY:$XAUTHORITY in
  :*:?*)
    # DISPLAY is set and points to a local display, and XAUTHORITY is
    # set, so merge the contents of `$XAUTHORITY` into ~/.Xauthority.
    XAUTHORITY=~/.Xauthority xauth merge "$XAUTHORITY";;
esac

¹ V zásadě to postrádá správné citace, ale v tomto konkrétním případě $DISPLAY a $XAUTHORITY nebude obsahovat žádný metaznak shellu.


Linux
  1. Ssh – Proč je Firefox tak pomalý oproti Ssh?

  2. Obsluha Ctrl-c v relaci Ssh?

  3. Povolit vzdálený přístup Ssh?

  1. Použití SSH k otevření aplikace na ploše

  2. Jak se mohu odhlásit z otevřené vzdálené relace SSH?

  3. Vpn tunel pro vzdálený přístup SSH

  1. Proč nemohu exportovat zobrazení Linuxu?

  2. xhost+ :Jak opravit chybu „Cannot Open Display“ při spouštění GUI na vzdáleném serveru

  3. SSH připojení přes reverzní (vzdálený) SSH tunel