Czy można przenieść okno z jednego ekranu X na inny na tym samym hoście?


16

Używam XFCE 4.12 z 3 monitorami ustawionymi na dwa ekrany X i dwie karty graficzne na tym samym komputerze. Dwa monitory tworzą jeden ekran X przy użyciu funkcji nvidia twinview, którą jest Screen0 na Device0 w konfiguracji Xorg. Trzeci monitor jest dla drugiego ekranu, który jest Screen1 na Device1 w konfiguracji Xorg. Mogę przeciągać okna między monitorami na Screen0. Mogę również swobodnie poruszać myszą między Screen0 i Screen1, a nawet dane ze schowka są przenoszone między dwoma ekranami X, ok.

Oba te ekrany X działają jako niezależne komputery stacjonarne z własnym zestawem rzutni. Podoba mi się to w ten sposób i jest użyteczny do automatycznego „przyklejenia” się z jednej strony. Jednak jeśli uruchomię program na jednym ekranie X, nie mogę przenieść go na inny ekran X, po prostu przeciągając go. Jeśli chcę uruchomić ten program na drugim ekranie, muszę go ponownie uruchomić na tym ekranie.

Moje pytanie brzmi, czy istnieje sposób na przeniesienie programu podczas jego działania na inny ekran za pomocą komendy lub innej funkcji systemu Windows. Dzięki.

Aktualizacja: Rozpocznę nagrodę za to pytanie, ale zastanawiałem się nad tym przez jakiś czas. Aby zdobyć nagrodę, musisz podać kilka dowodów na dowód.


1
xpra oferuje coś podobnego do tego, o co pytasz ...
vlp

Google ujawnia także xmove

Nie pamiętam, że musiałem coś zmienić w CentOS 5 lub 6, aby uzyskać takie zachowanie. Jakiej dystrybucji używasz tutaj w jakiej wersji?
Nils


@NathanFellman Możliwe, ale nawet nie sądzę, że w moim przypadku mówię o przemieszczaniu się między wyświetlaczami. Zgodnie z moją listą procesów uruchamiam tylko jedną instancję procesu X, czyli: 0. Nie ma: 1 lub: 2 itd. Może to tylko problem z tym, jak XFCE zarządza wieloma ekranami lub coś w mojej konfiguracji. Jeśli chodzi o wspomniane programy, żaden z nich nie wydaje się być nadal utrzymywany ani dostępny. xmove ma prawie 20 lat i nie mogę znaleźć kopii XiMove. xpra wydaje się także niewłaściwym programem do tego, co próbuję zrobić.
deltaray

Odpowiedzi:


13

Nie można przenieść aplikacji X uruchomionej bezpośrednio na serwerze X, na którym aplikacja jest ostatecznie wyświetlana, jest to spowodowane tym, że klient X jest „związany z serwerem X (wyświetlacz X), na którym uruchomiono go przez całe życie” [ 1 ] To jest najprawdopodobniej dotyczy to metadanych przechowywanych przez serwer X na temat okien klienta, których nie można łatwo przenieść między serwerami X.

To samo dotyczy osobno skonfigurowanych ekranów (gdy nie używa się rozszerzeń, takich jak Xinerama lub Twinview) dla programów, które nie mają wyraźnej obsługi wielu ekranów - „W tej konfiguracji nie można przenosić okien między ekranami, poza kilka specjalnych programów, takich jak GIMP i Emacs, które obsługują wiele ekranów. ”[ 2 ]

Teoretycznie, jeśli aplikacja została zaprojektowana do obsługi przełącznika kontekstowego serwera X, mogłaby być wyposażona w nowy numer wyświetlacza / ekranu, zapisać stan swoich okien, połączyć się z nowym serwerem / ekranem X i wskrzesić swoje okna, ale niewiele aplikacje byłyby zaprojektowane w ten sposób i koniecznie wymagałyby albo dużej liczby elementów lub włączenia biblioteki, która by to jakoś ułatwiła.

Najlepszą opcją jest prawdopodobnie użycie innych aplikacji, które mogą działać jako serwer proxy między klientem X a wyświetlającym serwerem X w podobny sposób, jak ekran GNU może być używany w aplikacjach konsolowych i terminalu. Wydaje się, że Xmove i Xpra [ 3 i 4 ] są najczęściej stosowanymi implementacjami do tego celu. Warunkiem korzystania z nich jest to, że aplikacje, które uruchamiasz, muszą zarejestrować się w Xmove lub Xpra jako swoim serwerze X, aby móc kontekstowo przełączać się między różnymi serwerami wyświetlania.

Wreszcie, na SuperUser jest jeszcze jedno pytanie, które zadaje podobne pytanie w nieco innym celu (podłącz ponownie do X po awarii X, zamiast celowego odłączania / ponownego łączenia klienta) [ 5 ]


2
Dzięki za próbę odpowiedzi, ale to nie jest problem. Mówię o przechodzeniu między ekranami X na tym samym serwerze, a nie między serwerami X.
deltaray,

5
Początkowo brakowało mi tego niuansu, przeprosin. Niestety bez rozszerzenia, takiego jak Xinerama, które łączy kilka ekranów w jeden, wydaje się, że aplikacje traktują osobne ekrany na tym samym serwerze jako osobne serwery logiczne i zarządzają połączeniami z nimi osobno - patrz link [2], który dodałem w ostatniej edycji. Obejście dotyczące przenoszenia aplikacji między serwerami X powinno również dotyczyć przenoszenia między ekranami, wystarczy określić część ekranową zmiennej środowiskowej DISPLAY podczas (na przykład) dołączania Xpra.
Benjamin,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.