표적:
헤드리스 Linux 시스템에서 실행하는 Java 프로그램의 그래픽 출력 비디오를 스트리밍(예: Twitch로)하고 싶습니다. 또한 모니터를 연결하지 않고 원격으로 시작할 수 있기를 원합니다. sudo reboot
예를 들어 SSH를 통해 수행한 다음 재부팅 후 SSH를 사용하여 다시 시작할 수 있습니다.
나는 상당한 진전을 이루었고 첫 번째 부분은 대부분 작동합니다. 그러나 현 시점에서는 모든 부분에 대한 유용한 정신 모델을 갖출 만큼 Linux에 대해 충분히 알지 못하므로 다음에 무엇을 시도해야 할지에 대한 조언을 듣고 싶습니다. 문제는 로그인 프로세스 및/또는 로그인 관리자와 X 서버와의 관계, 콘솔 사용자와 가상 사용자 간의 차이에 있는 것 같습니다.
질문:
기기를 모니터와 키보드에 연결하고 로그인하면 스트리밍이 예상대로 작동합니다. 다음을 실행하여(다른 화면 세션에서) SSH를 통해 애플리케이션을 시작하고 스트리밍할 수 있습니다.
DISPLAY=:0 ./gradlew viz DISPLAY=:0 obs --startstreaming
- 그러나 로그인하지 않으면 glxinfo와 마찬가지로 이러한 응용 프로그램도 실패합니다.
내가 실행하면 DISPLAY=:0 glxinfo
:
No protocol specified
Error: unable to open display :0
(존재하지 않는 디스플레이를 사용하려고 하면 첫 번째 줄이 나오지 않아서 :0이 존재하는데 무슨 이유에서인지 작동하지 않습니다. 로그인 후 glxinfo가 예상대로 작동합니다.)
Java 프로그램에서 다음을 얻습니다.
Exception in thread "main" java.awt.AWTError: Can't connect to X11 window server using ':0' as the value of the DISPLAY variable.
at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
(etc.)
obs는 나에게 다음을 제공합니다:
No protocol specified
QXcbConnection: Could not connect to display :0
Aborted (core dumped)
ps aux는 Xorg 프로세스가 실행 중임을 보여줍니다.
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1227 0.1 0.2 149588 48116 tty7 Ss+ 16:14 0:01 /usr/lib/xorg/Xorg :0 vt7 -nolisten tcp -auth /var/lib/xdm/authdir/authfiles/A:0-vcuAPl
앞서 언급했듯이 컴퓨터에 연결된 키보드로 입력하는 등 컴퓨터에서 물리적으로 수행해야 하는 일상적인 단계는 정말 피하고 싶습니다.
현재 설정에 대한 세부정보:
- 가상 머신이 아닌 실제 머신을 사용하고 있습니다. Ubuntu Server 16.04를 실행 중입니다.
- 이 상자의 주요 목적은 이 프로그램과 내가 작성한 몇 가지 다른 프로그램을 실행하는 것입니다. 필요한 경우 설치된 소프트웨어가 제대로 작동할 수 있도록 대폭 변경하겠습니다. 운영 체제를 다시 설치하거나 변경하는 것은 귀찮은 일이지만 선택 사항입니다.
- Linux용 OBS Studio를 사용하여 스트리밍하고 있습니다. 최근에는 --startstreaming 명령줄 매개변수가 추가되어 모니터가 연결된 상태에서 스트림을 한 번 구성한 후 언제든지 원격으로 스트림을 시작할 수 있습니다.
- Linux의 OBS Studio는 OpenGL 3.2를 지원해야 하므로 GeForce 9500 GT용으로 컴퓨터를 다시 설계했습니다. NVidia 독점 드라이버("nvidia-current")를 사용하는 한 필요한 OpenGL 버전을 지원합니다.
- 표준 우분투 서버 설치와는 다르게 X 서버도 실행해야 하고, 윈도우 매니저도 실행해야 할 것 같습니다. 이를 위해 다음 페이지에 따라 Xorg, Fluxbox 및 XDM을 설치했습니다.https://help.ubuntu.com/community/ServerGUI그리고https://help.ubuntu.com/community/Installation/LowMemorySystems, 대신 GNOME(또는 Ubuntu 데스크탑 설치)과 같은 것을 사용하면 실제로 실제 문제는 없습니다.
- "가짜 모니터" HDMI 어댑터를 구입했는데 제대로 작동하는 것 같으니 걱정하지 마세요.소프트웨어 솔루션컴퓨터가 모니터가 연결되어 있다고 생각하게 하십시오. (모니터나 실제 모니터가 연결된 상태에서 컴퓨터를 시작하면 ps aux는 디스플레이가 0인 Xorg 프로세스를 표시합니다. 모니터나 실제 모니터가 연결된 상태에서 시작하면 프로세스가 존재하지 않습니다.)
편집: 결과
더욱 사용하기 쉬운 상태로 바뀌었습니다. 더 나은 솔루션이 있다고 확신하지만 더 이상 스트리밍 박스에 물리적으로 접근할 필요가 없습니다.
먼저 xdm을 삭제했습니다. 그런 다음 시작 중에 "startx"를 실행하는 스크립트를 추가했습니다. 스크립트는 분명히 루트로 실행되고 있으며 이로 인해 Xauthority 문제와 MIT-MAGIC-COOKIE에 대한 오류 메시지가 발생하므로 XAUTHORITY를 /home/myUsername/.Xauthority
. 이를 위해서는 또 다른 해결 방법이 필요합니다. 시작한 후 sudo chown
.Xauthority 파일을 내 사용자(소유권이 루트로 설정되어 있음)에게 반환 해야 합니다 . 그런 다음 예상대로 DISPLAY :0에서 프로그램을 실행할 수 있습니다.
답변1
나는 이 주제에 대한 ArchLinux 위키 페이지를 읽어볼 것을 권장합니다. 이는 Ubuntu의 최근 systemd 사용과 공통점이 많기 때문입니다. 새로운 문제가 많이 소개되었습니다.회의권한이 있고 setuid 루트 없이 X 서버를 실행할 수 있습니다.
먼저자동 로그인VT로 이동한 다음 실행하세요.시작 x아니면 거기서부터 나가세요. 읽을 수 있는 다른 페이지는 다음과 같습니다.도래 송곳서버와디스플레이 관리자그리고시스템 사용자. 키워드도 찾아보고키오스크 모델당신이 원하는 것과 비슷하기 때문이죠. 아직 이 작업을 수행하지 않았으므로 자세한 내용을 제공할 수 없습니다.