Jak uruchomić aplikację GUI z powłoki ssh?

7

Mogę uzyskać dostęp do mojego linuksa przez ssh i przez vnc. Chcę uruchomić aplikację GUI, ale bezpośrednio z ssh nie chcę uzyskiwać dostępu przez VNC i klikać. Tak więc, po zalogowaniu się za pomocą ssh, chcę wydać polecenie magiczne, aby po zalogowaniu przez VNC zobaczyłem uruchomioną aplikację GUI. Jak mogę to zrobić?

edytować:

W Linuksie działa serwer X. Muszę zautomatyzować ponowne uruchomienie aplikacji GUI. Chcę to zrobić bez jakiejkolwiek interakcji z GUI. Czego potrzebuję:

  1. zaloguj się przez ssh na SERVER
  2. uruchom moją aplikację GUI, zmuszając ją do powiązania z serwerem X działającym na serwerze SERVER
  3. ??
  4. ZYSK!
karramba
źródło

Odpowiedzi:

5

Przeczytałem edytowaną wersję pytania, a jeśli dobrze cię rozumiem, chcesz uruchomić program z SSH bez pokazywania GUI ... po prostu chcesz uruchomić program i to zależy od X Windows, więc potrzebuję go, aby jakoś połączyć się z X Windows na samym serwerze.

Są dwie rzeczy, które musisz zrobić. Musisz zezwolić na połączenia spoza X Windows, a następnie powiedzieć powłoce (w SSH), z którym serwerem X ma się połączyć.

Po pierwsze, zezwalaj na połączenia przychodzące do serwera X. Otwórz okno terminala w X Windows na serwerze. (Musisz mieć do tego dostęp, w przeciwnym razie nie możesz tego zrobić.)

Wydaj następujące polecenie:

xhost +

Powinien powiedzieć „połączenia dozwolone ze wszystkich hostów” lub coś w tym celu.

Następnie, pozostając w X Windows, problem:

echo $DISPLAY

Spowoduje to wyświetlenie identyfikatora wyświetlacza. Zapisz to lub zapamiętaj. Zazwyczaj będzie to „: 0” lub „: 0.0”, ale nie martw się, jeśli jest inaczej.

To wszystko, co musisz zrobić z poziomu samego systemu Windows X.

Teraz SSH na serwerze z dowolnego miejsca. Wydaj polecenie:

export DISPLAY=[what-the-echo-command-gave-you]

I to powinno być to! Teraz powinieneś być w stanie uruchomić dowolne okna X z tej powłoki SSH i pojawi się na lokalnym serwerze X Windows.

Mam nadzieję, że to pomoże!

Teekin
źródło
4
xhost + to bardzo zły pomysł. Jeśli twój użytkownik uruchomił Xserver, powinieneś już mieć odpowiedni plik Xauthority, nie musisz się bawić z serwerem acls.
Geoff Reedy
@GeoffReedy Nie rozumiem o co ci chodzi. Postępując zgodnie z instrukcjami Helgi, udało mi się uruchomić aplikację z SSH. Jak mógłbym to zrobić bez xhost +? Jakie ryzyko podejmuję (musiałem się zalogować)?
Camilo Martin
1
@ CamiloMartin @ Helgi xhost + wyłącza całą kontrolę dostępu do serwera x. Każdy, kto może połączyć się z serwerem X, może podglądać zdarzenia, wprowadzać zdarzenia, zrzucać zawartość okna, zabijać programy działające na serwerze X itd. Możliwości te można wykorzystać jako odmowę usługi, wykonanie dowolnego programu lub inne złe rzeczy. Widzieć www2.slac.stanford.edu/computing/security/xwindow więcej informacji na ten temat. To, co powinieneś zrobić w większości konfiguracji, jest uruchomione echo $XAUTHORITY zamiast. Jeśli nie jest pusty, to kiedy chcesz uruchomić program GUI export XAUTHORITY=<saved content of $XAUTHORITY>.
Geoff Reedy
@GeoffReedy, dzięki za napiwek. Sam nie używałem tej sztuczki od lat, ale następnym razem na pewno będę szukać Xauthority.
Teekin
@GeoffReedy Bardzo dużo dziękuję. Zrobiłem to w skrypcie! Połóż to gimme-xauth.sh w twoim / usr / bin dla przyjemności i Xstasy. pastebin.com/GXx2hwC5
Camilo Martin
5

Musisz przekazać X11 na lokalną maszynę (ze zdalnego komputera). Podaj -X lub -Y flagi podczas wywoływania ssh.

mipadi
źródło
Zauważ, że pytanie mówi, że chciałby uruchomić serwer X na serwerze i uzyskać do niego dostęp VNC, a nie lokalnie uruchomić serwer X.
heavyd
4

To, na czym wyświetla się aplikacja, jest podyktowane przez DISPLAY Zmienna środowiskowa. robić export DISPLAY=:0.0 aby pojawił się na pierwszym ekranie zdalnego urządzenia.

Daenyth
źródło
0

Po pierwsze, nie jest to pytanie programistyczne (s / b serverfault.com)

Jednak musisz uruchomić serwer X w swoim systemie (na przykład XMing), a następnie uruchomić program GUI na linuxowym polu, to spowoduje umieszczenie GUI na twoim komputerze.

KevinDTimm
źródło
Nie chcę uruchamiać tego programu na moim komputerze, chcę go uruchomić na zdalnym hoście, ale z powłoki ssh, nie używając vnc. Nie mogę go uruchomić bezpośrednio z ssh, ponieważ nie ma x serwera działającego dla tej powłoki (?).
poprawne - jedynym sposobem na sprawdzenie GUI jest serwer X na twoim komputerze (jeśli jest to program X). W przeciwnym razie zobacz odpowiedź mipadi na przekazanie X11 dla alternatywy (to nie zawsze działa)
KevinDTimm
nie ma sposobu, aby zmusić aplikację do „powiązania” się z serwerem X, który działa na Linuksie? Nie muszę wchodzić w interakcję z GUI, po prostu uruchomić aplikację. Chciałbym zmusić go do korzystania z X dostępnego na serwerze. Zaktualizowałem moje pytanie, aby lepiej wyjaśnić.
0

FYI, możesz zrobić coś takiego w dziedzinie Windows, na przykład uruchamiając proces UNIX, używając WinSSHD i / lub Tunelier .

Jeśli masz na myśli uruchomienie gui w lokalnej sesji systemu Windows X, musisz ustawić zmienną DISPLAY na lokalną (tunnelier może mieć odpowiednie ustawienie), a ponieważ w systemie Windows musisz połączyć to z uruchomieniem emulatora x-window w oknach (takich jak cygwin-X )

djangofan
źródło
0

Najłatwiej jest to zrobić za pomocą multipleksera terminala, takiego jak screen lub tmux. To nie wymaga żadnych kłopotów xhost. kopiowanie i wklejanie autoryzacji lub coś takiego.

Podstawowa idea:

  1. Na komputerze zdalnym otwórz wirtualny terminal X; w tym wirtualnym terminalu, uruchom a screen lub tmux sesja. (Oznacza to klikanie w VNC, ale jest to jedyny moment, w którym musisz to zrobić.)
  2. Teraz za każdym razem, gdy SSH w zdalnej maszynie, możesz dołączyć do tego screen lub tmux sesja.
  3. Po podłączeniu możesz uruchomić dowolną aplikację GUI, która powinna pojawić się na zdalnej maszynie, tak jakbyś ją uruchomił.

Przykład ekranu GNU:

W wirtualnym terminalu urządzenia zdalnego (otwieranego przez VNC lub fizycznie):

you@remote:~$ screen -S myscreen

Następnie, kiedy włączysz SSH, możesz po prostu dołączyć do tej sesji:

you@remote:~$ screen -x myscreen

A potem z poziomu sesji ekranu uruchom dowolne aplikacje, które chcesz:

you@remote:~$ myapp &
Statisfactions
źródło