SSH: uruchamiaj programy GUI na zdalnym ekranie, a nie na ekranie X.

11

Problem

Większość ludzi chce połączyć się z serwerem przez ssh z opcją „-X” w celu uruchomienia programów GUI na zdalnym hoście przy użyciu wyświetlacza klienta. Chciałbym uruchamiać programy GUI na fizycznym monitorze podłączonym do serwera. Czy to możliwe ? Pozwól, że uściślę:

Moja sytuacja jest następująca: mam stację roboczą bez klawiatury lub myszy, ale jest do niej podłączony monitor. Chciałbym połączyć się z SSH za pomocą laptopa i móc uruchomić jakiś program graficzny, taki jak xeyes lub ssvnc, i wyświetlić go na monitorze stacji roboczej.

[xapple@laptop ~]$ ssh workstation
Last login: Mon Sep 26 20:03:35 2011 from laptop
[xapple@workstation ~]$ export DISPLAY=:0
[xapple@workstation ~]$ xeyes
No protocol specified
Error: Can't open display: :0

Edycja: dodatkowe informacje

Może powinienem wyjaśnić kilka rzeczy jaśniej:

  • Mam dostęp do sudo na stacji roboczej, w razie potrzeby mogę zainstalować wszystko.
  • Na stacji roboczej działa interfejs użytkownika GNOME.
  • Przed odłączeniem klawiatury i myszy od stacji roboczej zalogowałem się do sesji GNOME. Dlatego można obecnie zobaczyć mój pulpit GNOME na monitorze stacji roboczej.
  • Nie chcę uruchamiać programów z laptopa na stacji roboczej. Chciałbym uruchomić programy stacji roboczej na stacji roboczej. Xeyes lub jakikolwiek plik wykonywalny znajduje się na serwerze zdalnym i powinien zostać uruchomiony na monitorze serwera zdalnego
  • Rozumiem, że wykonanie tego spowoduje, że mój kursor nie zostanie podłączony do interfejsu. Nie mogę klikać na rzeczy. W porządku.

Każda pomoc bardzo mile widziana!

xApple
źródło
Czy wykonałeś xhost +na swoim serwerze?
karlphillip
Myślę, że jest to również interesujące pytanie, na przykład, jeśli masz 3 komputery Ubuntu z systemem Synergy, aby używać tej samej klawiatury i myszy między 3 ... podczas logowania musisz zalogować się 3 razy. fajnie byłoby stworzyć skrypt, który zaloguje Cię na pozostałe dwa komputery, gdy zalogujesz się na głównym komputerze.
Sverre

Odpowiedzi:

5

każda aplikacja xlib musi połączyć się z serwerem xserver. musisz poinformować aplikację o połączeniu z serwerem poprzez:

  • ustawienie zmiennej środowiskowej DISPLAY
  • przy użyciu flagi wiersza polecenia, takiej jak -display

do pierwszego xservera można zwykle dotrzeć poprzez ciąg połączenia „: 0”. więc spróbuj tego:

xeyes -display :0

albo to

env DISPLAY=:0 xeyes
akira
źródło
W wielu przypadkach (np. Gdy uruchamiany jest przez GDM GNOME), XAUTHORITYkonieczne będzie również ustawienie, ponieważ serwer X11 będzie używał tymczasowego pliku Xauthority.
user1686
Co ciekawe, po ustawieniu zmiennej $ DISPLAY, oprócz komunikatu „Błąd: nie można otworzyć wyświetlacza”, pojawia się komunikat „Nie określono protokołu” przy próbie uruchomienia Xeye.
xApple
@grawity Dzięki za poradę. Czy mogę zapytać, jak ustawić XAUTHORITY, aby moje polecenie działało?
xApple
5

Czy na tej stacji roboczej działa serwer X Windows? Bez tego wszystko jest dyskusyjne.

Potrzebujesz COŚ do przetworzenia danych na grafikę, piksele, kolory i lokalizacje. „Monitor” jest bezużyteczny bez jakiegoś oprogramowania do jego uruchomienia.

Zakładając, że tak. (ale z tekstu na pewno brzmi inaczej)

Biorąc pod uwagę nazwy hostów (i odpowiednie rozpoznawanie DNS przez / etc / hosts lub DNS lub cokolwiek innego) „stacji roboczej” i „laptopa” ... jeśli nie, zamień nazwy hostów komputera na odpowiednie adresy IP.

ssh workstation
xhost +laptop

w tym momencie możesz wylogować się ze stacji roboczej, ponieważ ustawia to uprawnienia na serwerze Xserver stacji roboczej, aby umożliwić połączenie „laptopa”.

jeśli odpowiednio uruchomisz programy z ustawionym DISPLAY env var, możesz spowodować, że aplikacje będą wyświetlane na stacji roboczej podczas pracy na laptopie.

DISPLAY=workstation:0 xeyes

-lub-

export DISPLAY=workstation:0
xeyes

jedna z metod będzie działać, ta ostatnia powoduje, że wszystko X11 związane z wyświetlaniem na stacji roboczej, gdy zostanie uruchomiony z tej powłoki. (mam nadzieję, że to miało sens)

Linia „xhost” pozwala zezwolić laptopowi na połączenie się z serwerem Xserver stacji roboczej. Bez niego otrzymasz odmowę dostępu, chyba że uruchomisz serwer X bez uprawnień, co nie jest tak naprawdę zalecane. Ochrona „xhost” jest nadal kiepska, ponieważ dane są przesyłane „zwykłym tekstem” między laptopem a stacją roboczą i mogą być wąchane, ale jest to łatwe rozwiązanie.

Jeśli chcesz prywatności, musisz ustawić szyfrowany tunel między laptopem a stacją roboczą (port 6000 dla wyświetlania: 0). Tak, robi się dziwnie w tym momencie.

Jeśli jesteś w kontrolowanym środowisku, wystarczy użyć polecenia „xhost + laptop”, jeśli opuścisz część „laptop” tego polecenia „xhost +”, KAŻDY może połączyć się z Xserver i wyświetlić rzeczy.

Pamiętaj, że Twoja mysz NIE jest „podłączona” do stacji roboczej Xserver i NIE będziesz w stanie manipulować oknami ani klikać na rzeczy.

Jeśli chcesz podłączyć mysz, polecam coś takiego jak x2x, synergy, vnc lub aplikacja do udostępniania ekranu oparta na X Windows.

lornix
źródło
Dzięki za odpowiedź ! Masz rację, być może muszę podać jeszcze kilka rzeczy: (1) Na stacji roboczej działa interfejs użytkownika GNOME (2) Nie chcę uruchamiać programów z mojego laptopa. Xeyes lub cokolwiek innego powinno być uruchomione na stacji roboczej z monitorem stacji roboczej (3) W porządku, rozumiem, że mój kursor nie zostanie podłączony.
xApple
Och, wtedy naprawdę wystarczy tylko ssh do stacji roboczej, ustawić zmienną DISPLAY na „localhost: 0” (lub po prostu „: 0”) i uruchomić aplikację. Nadal będziesz musiał radzić sobie z uprawnieniami (xhost + localhost prawdopodobnie najlepsza odpowiedź) i albo nohup, albo &! (działające w tle i usuwane) lub polecenia bg / disown z powłoki, aby aplikacja nie kończyła się po wylogowaniu. (chyba, że ​​tego właśnie chcesz)
lornix
Ach, więc może mój problem to tylko problem z pozwoleniem. Chociaż jeśli uruchomię „xeyes” jako root, komunikat o błędzie jest taki sam. Jeśli opublikujesz odpowiedź, która rozwiązuje problemy z pozwoleniami, mogę oznaczyć ją jako rozwiązaną!
xApple
Czy ktoś jest zalogowany do sesji X Windows na stacji roboczej? Bez tego kod, który nasłuchuje połączeń programu, nie jest jeszcze aktywny, tylko dane logowania. (Znacznie upraszczam!) Spróbuj ssh'ing na stacji roboczej, a następnie „startx”, NASTĘPNIE możesz połączyć się z wyświetlaczem. Innym sposobem jest użycie serwera X z pustymi kościami, wpisanie „X: 0 &”, ustawienie zmiennej DISPLAY, a następnie wykonanie „xhost + laptop” (lub po prostu „xhost +”). Ale dla większości robi się to nieco na niskim poziomie. (Idealne do testowania!)
lornix
Tak, zalogowałem się do sesji GNOME na stacji roboczej przed odłączeniem klawiatury i myszy. Niemniej jednak próbowałem wykonać polecenie „startx” z mojej sesji ssh. Komunikat o błędzie był następujący: „X: użytkownik nie ma uprawnień do uruchamiania serwera X, przerywanie.”
xApple