Java 프로그램을 실행하도록 RPi 설정

Java 프로그램을 실행하도록 RPi 설정

그래픽 출력을 실행해야 하는 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

만약에해당 서버에 액세스해야 하는 경우 x11vncvnc 뷰어를 사용할 수 있습니다. 이것은 귀하의 질문 범위를 약간 벗어나지만 여기에는 적용됩니다 . 예를 들어 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와 같은 다른 솔루션을 시도했지만 너무 느렸습니다 ^^'

관련 정보