Internet Info, s.r.o. Lupa Root Měšec Podnikatel DigiZone Slunečnice Vitalianew Bomba Navrcholu Weblogy Jagg Woko Dobrý web Computer.cz SK: MojeLinky
Root.czBlogyPetr Krčmář: blog nejen o Linuxu

Gtk-WARNING **: cannot open display

Petr Krčmář, 10. 01. 2010, 12:37 v kategorii Linux,

Určitě už jste se setkali s takto nepříjemnou a odmítavou hláškou. Jak problém pořešit aneb návod typu snadno, rychle a bez stresu.

(A hlavně pro mě, kdybych to někdy potřeboval a zapomněl.)

Možná se vám už stalo, že jste se přihlásili na vzdálenou mašinu, na které běžel X server, ale nedokázali jste na ní vzdáleně spustit nějaký GUI nástroj. Vždycky vás aplikace vyhodila s tím, že se nemůže připojit k X serveru. Hláška vypadá asi tak:

Gtk-WARNING **: cannot open display

V zásadě existují dvě různé situace. Pokud jste se přihlásili pod stejným uživatelem, pod jakým běží zmíněný X server, stačí do konzole napsat:

$ export DISPLAY=:0.0

A pak už můžete vesele spouštět aplikace, jako by se nechumelilo. Tímto příkazem jste totiž nastavili proměnnou DISPLAY, kterou využívají grafické aplikace a ukazuje jim, kde mají hledat svůj X server. Jednoduché.

Komplikovanější to bude, pokud se přihlašujete jako jiný uživatel. Obvykle vám to nebude fungovat ani v případě, že se přihlásíte jako root (pokud můžete). Pokud jste běžný uživatel (a jiný než ten, kdo spustil Xka), tak to určitě fungovat nebude.

Nejelegantnějším řešením, které znám, je instalace balíčku sux. Ten funguje jako klasické su, ale přidává také autoritu pro spouštění aplikací komunikujících s X serverem. Použití je opět jednoduché:

$ sux uživatel příkaz

Jako uživatele musíte samozřejmě uvést uživatelské jméno toho, kdo má na stroji právě puštěný X server. Příkaz sux se pak zeptá na jeho heslo. Je to pochopitelné, protože jde o ochranu X serveru. Nechceme přece, aby kdokoliv mohl námi spuštěný X server obsluhovat. No a pokud známe heslo, funguje nám to.

Pokud znáte nějakou jinou a hezkou cestu, určitě se o ní zmiňte v diskusi. Pokud bude hezčí a rozumnější, přidám ji do blogu.

Komentáře (11)

  1. 10. 01. 2010, 13:02 asdfasdfasdfasdf napsal:

    xhost +
    program
    xhost -

  2. 10. 01. 2010, 13:50 Petr Krčmář napsal:

    [1] Ne, to nefunguje. Program xhost konfiguruje X server, ale musí k němu mít práva. Což se v tomhle případě jaksi popírá.

  3. 10. 01. 2010, 14:13 Joyride napsal:

    na lokalnim stroji
    xhost +
    potom ssh -Y na vzdaleny stroj
    na vzdalenem stroji si exportnu display na lokalni ip
    a funguju

  4. 10. 01. 2010, 14:21 Joyride napsal:

    zapomněl jsem dodat, že na lokalnim stroji musí běžet xserver :-)

  5. 10. 01. 2010, 14:44 Petr Krčmář napsal:

    [3] To ano, ale tady řeším jiný problém: když se SSHčknu někomu na notebook a potřebuju mu tam něco spustit. Čili X server běží na vzdálené mašině. Používám to, když má někdo nějaký problém nebo mu prostě potřebuju zobrazit nějaký dialog na jeho obrazovce :-).

  6. 10. 01. 2010, 14:54 Undead Slayer napsal:

    tak me "vzdy" stacilo pouzit prepinac pro prihlaseni ke vzdalenemu stroji ;-)

    ssh -X host

  7. 10. 01. 2010, 15:14 Petr Krčmář napsal:

    [6] Tak to je ovšem stejný případ jako výše :-). Já chci spouštět programy na vzdálené ploše, ne u sebe.

  8. 10. 01. 2010, 19:01 jehovista napsal:

    Je to sice asi jasne, ale urcite by stalo za zminku, ze uzivatel nemusi bezet na DISPLAY=:0.0, ale treba na :20.0
    Proto davam do kazde session po spusteni echo $DISPLAY > ~/display, abych mohl zjistit, kde to vlastne bezi. Tohle asi resi ten sux, ale zase mi to neumozni treba dat neco do cronu

  9. 10. 01. 2010, 21:07 Joyride napsal:

    [5] aha, tak to jsem to špatně pochopil :-)

  10. 10. 01. 2010, 22:18 Deafboy2v1 napsal:

    Na ubuntu som sa stretol aj s problemom, ze mi toto vypisovalo aj pri pokuse spustit pod svojim userom , fyzicky ma mojej masine hocijaku aplikacku. Vzdy pomohol len uplny restart, ale ubuntu zije vo svojom vlastnom paralelnom vesmire.

    Kazdopadne dakujem za doplnenie informacii, export DISPLAY=:0 som objavil nedavno a odvtedy ho hojne vyuzivam, dalsie info o problematike sa mi hodi. (nebyt toho, urcite by som sa o par dni rozculoval preco mi to nefici ak som cez ssh prihlaseny pod inym userom ako tym co vlastni aktualny display 0.0)

  11. 11. 01. 2010, 18:55 Marian Ganišin napsal:

    V případě standardních podmínek a za předpokladu, že můžu číst .Xauthority "oběti":

    DISPLAY=:0.0 XAUTHORITY=~obet/.Xauthority xclock

    man xauth napoví další vhodné cesty (vlástně různé varianty stále téhož), kdy každá je lepší (elegantnější, systémovější, fajnovější, a více frajerská) než použití su. ;) Koneckonců "pochybný" sux nedělá nic jiného (pochybný právě kvůli su).

Přidej komentář