Sposób wiersza polecenia wysyłania naciśnięć klawiszy do okna otwartego na innej sesji X.

11

Na moim głównym komputerze mam otwarty i zalogowany pulpit Ubuntu. Następnie loguję się również na tym komputerze ze zdalnego komputera, używając X2go, który tworzy nową sesję X. Mam plik libreoffice otwarty w oryginalnej sesji . Chcę zapisać ten plik i zamknąć go - ale ze zdalnego komputera! (Obie sesje mają zalogowanego tego samego użytkownika; w razie potrzeby mogę sudo)

Próbowałem użyć, xdotool searchale nie udało się znaleźć okna. Czy jest sposób na zrobienie tego, czego chcę od drugiej sesji? Widzę proces za pomocą ps -A Widzę nawet otwarty plik za pomocą lsof! Jak mogę wykonać na nim operację „zapisz i zamknij”?

Sanjay Manohar
źródło
2
Ty mógł po prostu zabić proces - jeśli nie mają żadnych poważnych niezapisane zmiany to byłoby proste. Jeśli to zrobisz, nadal powinno próbować odzyskać dokument przy następnym otwarciu.
Wayne Werner,
To prawda @wayne, prawdopodobnie automatycznie się odnalazłoby ... Dzięki za sugestię. Nie jestem pewien, czy chciałbym skorzystać z tej okazji! Nie masz możliwości wysyłania naciśnięć klawiszy (ani żadnych innych bezpośrednich wiadomości)? Brzmi tak prosto.
Sanjay Manohar,
Jestem pewien, że istnieją sposoby - po prostu ich nie znam. Niektóre skomplikowane obejmują instalację prostego klienta VNC i ustawienie DISPLAY=:0(lub cokolwiek innego, na którym wyświetla się twoje inne konto), a następnie uruchomienie serwera i przejście do niego od klienta. Ale to może być przesada. LibreOffice może mieć protokół wiadomości - nie znam go zbyt dobrze, ponieważ używam Dokumentów Google lub zwykłych plików tekstowych w Vimie (w tym LaTex) ...
Wayne Werner,
użyj VNC, aby uzyskać dostęp do głównego okna z innej lokalizacji
Olivier Dulac
1
xdotool działa na bieżącej wartości $ DISPLAY sesji. Możesz ssh na dowolnej maszynie lub vncserver, a następnie uruchomić na nim xdotool. Na przykład, jeśli uruchamiasz vncserver na porcie 5901, używa on: 1 ekranu zgodnie z konwencją. Więc uruchom, DISPLAY:1a następnie uruchom dowolny program X (xeyes do testu) i będzie działał pod VNC. To samo dotyczy zdalnych serwerów vncservers. SSH do maszyny, a następnie po prostu uruchom eksport WYŚWIETLACZ: 1 przed użyciem.
m3nda

Odpowiedzi:

9

Zakładając domyślną konfigurację, xdpyinfo na „oryginalnym” pokazałby wyświetlanie „: 0.0”, np

xdpyinfo | grep name

Jeśli twoja zmienna środowiskowa DISPLAY na „x2go” to „: 1.0”, to powinno tak być.

Z terminala na „x2go” Spróbuj znaleźć identyfikator okna:

DISPLAY=:0.0 xwininfo -root -tree | grep Writer

Możliwe, że kontrola dostępu jest skonfigurowana tak, aby nie działała, ale myślę, że powinna, jeśli jesteś tym samym identyfikatorem użytkownika na tym samym hoście (tj. Dostęp do ~ / .Xauthority). Zaznacz wynik „Xauth list”, jeśli nie masz dostępu.

Jeśli to działa, użyj swojego ulubionego narzędzia do sterowania nim. Dodaj „-int” do powyższego xwininfo, aby wypisać windowid dziesiętnie, jeśli twoje narzędzie tego wymaga, xdotool nie:

export DISPLAY=:0.0
xdotool windowactivate 0x15a18918
xdotool windowfocus 0x15a18918
xdotool key "ctrl+s"
xdotool key "ctrl+q"

lub możesz mieć więcej szczęścia z tymi zamiast „ctrl + s” / „ctrl + q”

xdotool key "meta+f" "s"
xdotool key "meta+f" "c"
xdotool key "meta+f" "x"

Możesz potrzebować „alt +” zamiast „meta +”, mam niestandardowe mapowania meta / alt / super. meta działa dla mnie, przetestowane przy użyciu Xnest. Zakładam, że niezmieniony układ menu w języku angielskim i akceleratory.

Możliwe, że na twojej drodze pojawi się wyskakujące okienko, w którym to przypadku warto spróbować:

xdotool key "Escape"

kilka razy, a następnie ponów próbę zapisania i zamknięcia. Pamiętaj, że xdotool jest wybredny, jeśli chodzi o dokładny przypadek nazw „kluczy”.

Powinieneś być w stanie wypróbować to wszystko, uruchamiając libreoffice na x2go i NIE zmieniając swojego WYŚWIETLACZA. Powinieneś zapisać polecenia w pliku skryptu powłoki, aby zmiany fokusa nie zepsuły cię.

lsof powinien pokazywać, że plik nie jest już otwarty, jeśli zadziałał :-)

pan. spuratic
źródło
Dziękuję za podpowiedź na xdotool key "Escape"temat nazw, ale nie wypróbowałem długich nazw: D
m3nda
1

Wygląda na to, że istnieje kilka możliwych wymagań. najwyraźniej host musi znajdować się w pliku xhosts (oznaczono go jako odpowiedź) i wyeksportować odpowiednią wartość WYŚWIETLACZA. Ten post powinien pomóc ci to zrobić tak, jak chcesz, pozwalając xdotool znaleźć zdalne okno x11 .

Joshua K.
źródło