저는 XFCE 4.12를 실행하고 있으며 동일한 컴퓨터에 2개의 X 화면과 2개의 그래픽 카드로 구성된 3개의 모니터가 있습니다. 모니터 중 2개는 nvidia Twinview 기능을 사용하여 Xorg 구성의 Device0에 X 화면인 Screen0을 형성합니다. 세 번째 모니터는 Xorg 구성에서 Device1의 두 번째 화면인 Screen1에 사용됩니다. Screen0의 모니터 간에 창을 끌 수 있습니다. 또한 Screen0과 Screen1 사이에서 마우스를 자유롭게 이동할 수 있으며 두 X 화면 간에 클립보드 데이터도 전송할 수 있습니다.
두 X 화면 모두 자체 뷰포트 세트를 갖춘 독립적인 데스크톱 역할을 합니다. 나는 이것을 좋아합니다. 한쪽을 자동으로 "고정"시키는 데 유용합니다. 하지만 하나의 X 화면에서 프로그램을 실행하면 단순히 다른 X 화면으로 끌어다 놓을 수는 없습니다. 다른 화면에서 프로그램을 실행하려면 해당 화면에서 다시 시작해야 합니다.
내 질문은 프로그램이 실행되는 동안 X Windows의 일부 명령이나 기타 기능을 사용하여 프로그램을 다른 화면으로 이동할 수 있는 방법이 있습니까? 감사해요.
고쳐 쓰다:이 질문에 현상금을 걸려고 하는데, 한동안 이것에 대해 궁금했습니다. 포상금을 받으려면 몇 가지 증거 참조 자료를 제공해야 합니다.
답변1
최종적으로 해당 응용 프로그램을 표시하는 X 서버를 통해 직접 실행되는 X 응용 프로그램을 이동할 수 없습니다.1] 이는 X 서버가 X 서버 간에 쉽게 전송할 수 없는 클라이언트 창에 대해 보유하고 있는 메타데이터와 관련이 있을 가능성이 높습니다.
다중 화면 지원으로 명시적으로 작성되지 않은 프로그램에 대해 개별적으로 구성된 화면(Xinerama 또는 Twinview와 같은 확장을 사용하지 않는 경우)에도 마찬가지입니다. "이 구성을 사용하면 다음과 같은 일부 특수 프로그램을 제외하고 화면 간에 창을 이동할 수 없습니다. GIMP와 Emacs는 다중 화면을 지원합니다."[2]
이론적으로 응용 프로그램이 X 서버 컨텍스트 전환에 대처하도록 설계된 경우 새 디스플레이/화면 번호를 부여하고 창 상태를 저장하고 새 X 서버/화면에 연결하여 창을 복원할 수 있지만 거의 응용 프로그램이 아닙니다. 이러한 방식으로 설계될 것이며 필연적으로 많은 상용구가 필요하거나 어떤 방식으로든 이를 용이하게 할 수 있는 라이브러리가 포함됩니다.
가장 좋은 옵션은 GNU Screen을 콘솔 응용 프로그램과 터미널에 사용할 수 있는 것처럼 X 클라이언트와 디스플레이 X 서버 사이에서 프록시 역할을 할 수 있는 다른 응용 프로그램을 사용하는 것입니다. Xmove 및 Xpra [삼&4]가 가장 널리 사용되는 구현인 것으로 보입니다. 이를 사용할 때 주의할 점은 실행하는 응용 프로그램이 Xmove 또는 Xpra에 X 서버로 등록되어야 서로 다른 디스플레이 서버 간 컨텍스트 전환이 가능하다는 것입니다.
마지막으로 슈퍼유저에 관한 또 다른 질문이 있습니다. 이 질문은 약간 다른 목적으로 유사한 질문을 하고 있습니다(의도적으로 클라이언트 연결을 끊거나 다시 연결하는 대신 X가 충돌한 후 다시 연결).5]
- [1]https://en.wikipedia.org/wiki/Xmove
- [2]https://wiki.archlinux.org/index.php/Multihead#Separate_screens
- [삼]https://wiki.archlinux.org/index.php/Allow_a_program_to_continue_after_logoff
- [4]https://wiki.archlinux.org/index.php/Xpra
- [5]https://superuser.com/questions/238728/recover-an-application-in-sleeping-state-after-an-x-server-crash