Pewnego razu,
DISPLAY=:0.0 totem /path/to/movie.avi
po ssh'owaniu na moim pulpicie z laptopa spowodowałoby, że totem grał movie.avi
na moim pulpicie.
Teraz wyświetla błąd:
No protocol specified Cannot open display:
Ponownie zainstalowałem wyciskanie Debiana, gdy stało się stabilne na obu komputerach i chyba zepsułem konfigurację.
Przejrzałem to i nie mogę przez całe życie rozgryźć, co powinienem robić.
(VLC ma interfejs HTTP, który działa, ale nie jest tak wygodny jak ssh.)
Ten sam problem pojawia się, gdy próbuję uruchomić to z zadania crona.
totem
braku pliku cookie X i musisz ustawićXAUTHORITY
odpowiednią wartość, tj. Wartość w zwykłej sesji na pulpicie. Czytaj Linux: wmctrl nie może otworzyć ekranu, gdy sesja jest inicjowana przez ssh + screen dla jakiegoś tła; zobacz także pokrewną odpowiedź. Jako root mogę uruchomić program graficzny na pulpicie innego użytkownika? .$XAUTHORITY
się~/.Xauthority
tak, jak wszyscy się spodziewają.Odpowiedzi:
( Zaadaptowano z systemu Linux: wmctrl nie może otworzyć ekranu, gdy sesja jest inicjowana przez ssh + screen )
WYŚWIETLANIE I ORGAN
Program X potrzebuje dwóch informacji, aby połączyć się z wyświetlaczem X.
Potrzebuje adresu wyświetlacza, który zazwyczaj
:0
jest zalogowany lokalnie lub:10
,:11
itp., Gdy logujesz się zdalnie (ale liczba może się zmienić w zależności od liczby aktywnych połączeń X). Adres wyświetlacza jest zwykle wskazywany wDISPLAY
zmiennej środowiskowej.Potrzebuje hasła do wyświetlacza. Hasła wyświetlania X nazywane są magicznymi ciasteczkami . Magiczne pliki cookie nie są określane bezpośrednio: zawsze są przechowywane w plikach autoryzacji X, które są zbiorem zapisów w formie „display
:42
ma ciasteczko123456
”. Plik uprawnień X jest zwykle wskazywany wXAUTHORITY
zmiennej środowiskowej. Jeśli$XAUTHORITY
nie jest ustawiony, programy używają~/.Xauthority
.Próbujesz działać w oknach wyświetlanych na pulpicie. Jeśli jesteś jedyną osobą korzystającą z komputera, najprawdopodobniej jest to nazwa wyświetlana
:0
. Znalezienie lokalizacji pliku autorytetu X jest trudniejsze, ponieważ z gdm skonfigurowanym w Debian squeeze lub Ubuntu 10.04, znajduje się w pliku o losowo generowanej nazwie. (Wcześniej nie miałeś problemu, ponieważ wcześniejsze wersje gdm korzystały z ustawienia domyślnego, tj. Zapisanych plików cookie~/.Xauthority
.)Uzyskiwanie wartości zmiennych
Oto kilka sposobów uzyskania wartości
DISPLAY
iXAUTHORITY
:Możesz systematycznie uruchamiać sesję ekranową z pulpitu, być może automatycznie w skryptach logowania (z
~/.profile
; ale rób to tylko wtedy, gdy logujesz się w X: test, jeśliDISPLAY
jest ustawiona na wartość zaczynającą się od:
(która powinna obejmować wszystkie przypadki, w których prawdopodobnie spotkać)). W~/.profile
:Następnie w sesji ssh:
Można również zapisać wartości
DISPLAY
iXAUTHORITY
w pliku i przywołać wartości. W~/.profile
:W sesji ssh:
Można wykryć wartości
DISPLAY
iXAUTHORITY
od uruchomionego procesu. To jest trudniejsze do zautomatyzowania. Musisz ustalić PID procesu podłączonego do wyświetlacza, nad którym chcesz pracować, a następnie pobrać zmienne środowiskowe z/proc/$pid/environ
(eval export $(</proc/$pid/environ tr \\0 \\n | grep -E '^(DISPLAY|XAUTHORITY)=')
¹).Kopiowanie ciasteczek
Inne podejście (zgodnie z sugestią Arrowmaster ) polega na tym, aby nie próbować uzyskać wartości
$XAUTHORITY
w sesji ssh, ale zamiast tego zmusić sesję X do skopiowania plików cookie~/.Xauthority
. Ponieważ pliki cookie są generowane przy każdym logowaniu, nie ma problemu, jeśli utrzymasz nieaktualne wartości~/.Xauthority
.Problem z bezpieczeństwem może wystąpić, jeśli katalog domowy jest dostępny za pośrednictwem NFS lub innego sieciowego systemu plików, który umożliwia zdalnym administratorom przeglądanie jego zawartości. Nadal będą musieli jakoś połączyć się z twoim komputerem, chyba że włączysz połączenia X TCP (domyślnie Debian je wyłącza). Tak więc dla większości osób nie dotyczy to (brak NFS) lub nie stanowi problemu (brak połączeń X TCP).
Aby skopiować pliki cookie podczas logowania do sesji pulpitu X, dodaj następujące wiersze do
~/.xprofile
lub~/.profile
(lub innego skryptu czytanego podczas logowania):¹ Zasadniczo brakuje odpowiedniego cytowania, ale w tym konkretnym przypadku
$DISPLAY
i$XAUTHORITY
nie będzie zawierał żadnego metaznaku powłoki.źródło
~/.xprofile
który powinien być uruchamiany tylko podczas logowania X i zlecenie utworzenia / aktualizacji~/.Xauthority
z poprawnymi informacjami. Czy wystarczy dowiązanie symboliczne?~/.Xauthority
.xauth extract - $DISPLAY | xauth -f "$HOME/.Xauthority" merge -
w~/.xprofile
rozwiązaniu przypadku wielu $ DISPLAY?Rozwiązałem ten problem, dodając
do
~/.xprofile
. Nie wiem, czy jest to całkowicie bezpieczne (byłbym bardzo zainteresowany, aby dowiedzieć się, co myślą bardziej znający się na rzeczy ludzie), ale zgaduję, że jest to o wiele lepsze niż wyłączenie kontroli dostępu (zxhost +
), jak to zwykle sugeruje się, gdy ty google dla tego problemu.źródło
localuser
adresy interpretowane przez serwer są całkowicie bezpieczne. Debian robi to domyślnie nawet w ramach procesu logowania (in/etc/X11/Xsession.d/35x11-common_xhost-local
). Więcej informacji znajduje się na stronie podręcznika Xsecurity .xhost +
prawdopodobnie w większości przypadków wystarczy ...xhost(1)
iXsecurity(7)
dla dokumentów). Samo to polecenie nie pozwala na żaden dostęp zdalny ani przekazywanie X11 (dla których mechanizm „magicznego ciasteczka” jest zwykle preferowanyxhost
).Musisz
export DISPLAY=:0.0
źródło
Działa dla mnie, debian wheezy -> ubuntu trusty.
Uwaga: w tym przypadku na serwerze nie działa menedżer wyświetlania, jest to „wirtualna” maszyna wirtualna bez podłączonej karty graficznej lub monitora.
Wyświetlacz X na laptopie pokazuje wyjście Xterm działającego na serwerze.
Debuguj za pomocą:
strace
rozleje mnóstwo krwawych szczegółów na temat tego, co robi, powinieneś być w stanie zgadnąć, gdzie się utknął - czekając na połączenie lub cokolwiek innego.W jednej linii ..
źródło