그래픽 출력을 실행해야 하는 Ubuntu MATE 20.04에서 프로그램을 실행하려고 합니다. 모니터를 연결할 때도 있고 연결하지 않을 때도 있습니다. 모니터 유무에 관계없이 MATE로 부팅되도록 내 컴퓨터(Raspberry Pi 4)를 구성하고 싶습니다.
배경으로 이 프로그램은 Java로 작성된 라디오 스캐너 소프트웨어이며 부팅 시 프로그램을 시작할 수 있기를 원합니다. 실행하려면 그래픽 출력이 필요합니다. 나는 이 프로그램을 작성하지 않았으며 X 외부에서 실행하려는 것은 내 능력 밖의 일입니다.
현재 MATE 데스크탑 내에서 실행기로 실행되도록 설정했으며 모니터가 있을 때 제대로 작동합니다.
모니터 없이 데스크톱이 실행되는지 여부는 중요하지 않습니다. 시스템 리소스는 프로그램을 실행하는 것만큼 중요하지 않습니다.
"가짜" X 세션에서 프로그램을 실행하는 것도 허용되지만 모니터가 연결되어 있을 때 이런 일이 발생하지 않도록 방지해야 합니다. 이 문제는 데스크탑이 시작된 후 프로세스를 수동으로(자동으로) 종료하여 해결할 수도 있습니다. 다시 말하지만, 그것은 나에게 중요하지 않습니다. 중요한 것은 처음부터 그것이 작동하도록 만드는 것입니다.
편집하다:연습의 목적은 라즈베리 파이를 연결하고 라디오(경찰 등)를 검색하는 프로그램으로 직접 부팅하여 스피커를 통해 재생하는 경우 프로그램을 실행하는 것입니다.
편집 2:
zach@zach-MATE20:~$ sudo systemctl enable rc-local.service
[sudo] password for zach:
The unit files have no installation config (WantedBy=, RequiredBy=, Also=,
Alias= settings in the [Install] section, and DefaultInstance= for template
units). This means they are not meant to be enabled using systemctl.
Possible reasons for having this kind of units are:
• A unit may be statically enabled by being symlinked from another unit's
.wants/ or .requires/ directory.
• A unit's purpose may be to act as a helper for some other unit which has
a requirement dependency on it.
• A unit may be started when needed via activation (socket, path, timer,
D-Bus, udev, scripted systemctl call, ...).
• In case of template units, the unit is meant to be enabled with some
instance name specified.
답변1
VNC를 통해 Raspberry Pi(RPi) 자체에서 액세스하거나 네트워크를 통해 다른 컴퓨터에서 액세스할 수 있는 매우 가벼운 가상 데스크탑 환경에서 Java 프로그램을 항상 실행하는 것이 좋습니다. 이렇게 하면 모니터가 RPi에 연결되어 있는지 여부는 중요하지 않습니다.
Java 프로그램을 실행하도록 RPi 설정
Xvfb 및 Fluxbox를 사용하여 가상 데스크톱을 제공하고 "x11vnc"를 사용하여 가상 데스크톱에 대한 액세스를 제공합니다. Xvfb의 데비안 패키지 설명:
Xvfb는 디스플레이 하드웨어 및 물리적 입력 장치 없이 컴퓨터에서 실행될 수 있는 X 서버를 제공합니다. 가상 메모리를 사용하여 멍청한 프레임 버퍼를 에뮬레이션합니다.
필요한 패키지 설치
sudo apt install x11vnc xvfb fluxbox x11-apps
RPi의 기본 사용자( pi
)가 Java 프로그램을 실행하는 데 사용된다고 가정합니다.
Java 프로그램을 실행하는 스크립트
SSH 또는 물리적 콘솔(실제 모니터와 키보드 포함)을 통해 RPi에 로그인합니다.
/home/pi/radio_scanner.sh
다음 내용으로 스크립트 파일을 만듭니다.
#!/bin/bash
export DISPLAY=:1
Xvfb $DISPLAY -screen 0 1024x768x16 &
fluxbox &
x11vnc -display $DISPLAY -bg -forever -nopw -quiet -xkb
xclock & # just for testing, may remove this line
java -jar some_file.jar & # you program
스크립트를 실행 가능하게 만듭니다.
chmod +x /home/pi/radio_scanner.sh
스크립트를 백그라운드 프로세스로 실행하여 출력을 파일로 리디렉션합니다.
~pi/radio_scanner.sh > ~pi/log_radio_scanner.txt 2> ~pi/errors_radio_scanner.txt &
선택적 최소 보안(비밀번호 보호)
VNC 액세스를 비밀번호로 보호하려면 먼저 비밀번호를 설정하세요.
x11vnc -storepasswd
그런 다음 스크립트에서 실행 중인 줄을 다음 x11vnc
으로 바꿉니다.
x11vnc -display $DISPLAY -bg -forever -usepw -quiet -xkb
Java 프로그램의 실행 상태 확인
RPi 콘솔이나 네트워크를 통해 액세스할 수 있는 다른 컴퓨터의 VNC 클라이언트를 사용하여 RPi에 연결합니다. 내 컴퓨터는 tigervnc-viewer
(Linux)입니다.
vncviewer RPI_IP_ADDRESS
이제 Java 프로그램과 xclock 애플리케이션이 실행 중인 Fluxbox 데스크탑을 볼 수 있습니다.
Java 프로그램 자동 시작
RPi가 시작될 때 Java 프로그램을 계속 실행하려면 다음 두 가지 옵션 중 하나를 시도하십시오.
1) 예약된 작업을 사용하세요
아마도 Ubuntu Mate를 위한 최선의 선택일 것입니다.
사용자의 (pi) crontab을 편집하고 시작 중에 프로그램이 실행되도록 예약하십시오. 셸에서 실행:
crontab -e
텍스트 편집기가 나타나면 끝에 다음 줄을 추가하십시오.
@reboot /home/pi/radio_scanner.sh
2) rc.local을 사용하세요
파일에 다음 줄을 삽입합니다 /etc/rc.local
. "" 명령을 exit 0
파일의 마지막 줄로 유지하도록 주의하세요 !
su - pi --command=/home/pi/radio_scanner.sh > ~pi/log_radio_scanner.txt 2> ~pi/errors_radio_scanner.txt &
답변2
당신은 그것을 사용할 수 있습니다 xvfb-run
:
xvfb-run은 가상 X 서버 환경에서 명령(일반적으로 X 클라이언트 또는 실행할 클라이언트 목록이 포함된 스크립트) 실행 작업을 단순화하는 Xvfb(1x) 명령에 대한 래퍼입니다.
프로그램/스크립트가 다음과 같은 경우 /usr/local/bin/radio-scanner
직접 실행할 수 있습니다.
xvfb-run /usr/local/bin/radio-scanner
만약에해당 서버에 액세스해야 하는 경우 x11vnc
vnc 뷰어를 사용할 수 있습니다. 이것은 귀하의 질문 범위를 약간 벗어나지만 여기에는 적용됩니다 . 예를 들어 x11vnc+xvncviewer
보겠습니다 .xclock
# run insided X server number 99, specify the auth file
xvfb-run -n 99 -f /tmp/xvfb-auth -- xclock -digital -update 1
그런 다음 현재 화면을 봐야 할 경우:
# connect x11vnc to it
x11vnc -display :99 -N -auth /tmp/xvfb-auth
# connect a vnc client to display :99
xvncviewer :99
답변3
저도 같은 상황에 직면했는데 x2go 서버와 x2go 클라이언트를 설치해서 빠르게 해결했습니다.
https://wiki.x2go.org/doku.php
https://wiki.x2go.org/doku.php/wiki:저장소:raspbian
https://www.youtube.com/watch?v=Qzjg8MvdkmA&ab_channel=LawrenceSystems
vnc와 같은 다른 솔루션을 시도했지만 너무 느렸습니다 ^^'