Запуск Linux с монитором или без него

Использование gsub()в awkдля последнего;-поля с разделителями:

$ awk -F ';' 'BEGIN { OFS=FS } { gsub(" ", ",", $NF); print }' file
some name;another thing; random;,value,value,value,value,value

Используя sedи предполагая, что мы хотим заменить все пробелы после последнего ;запятыми:

$ sed 'h;s/.*;//;y/ /,/;x;s/;[^;]*$//;G;s/\n/;/' file
some name;another thing; random;,value,value,value,value,value

Аннотированный sedскрипт:

h               ; # Duplicate line into hold space
s/.*;//         ; # Delete up to the last ;
y/ /,/          ; # Change space to comma in remaining data
x               ; # Swap pattern and hold spaces
s/;[^;]*$//     ; # Delete from the last ;
G               ; # Append hold space delimited by newline
s/\n/;/         ; # Replace the embedded newline with ;
                ; # (implicit print)

«Пространство хранения» представляет собой отдельный буфер хранения, который sedпредоставляет. «Пространство шаблонов» — это буфер, в который данные считываются из ввода и к которому могут быть применены модификации.

1
14.11.2020, 12:45
3 ответа

Я предлагаю вам, чтобы ваша Java-программа всегда работала в очень легкой среде виртуального рабочего стола, к которой можно получить доступ через VNC с самого Raspberry Pi (RPi )или с другого компьютера через сеть. Таким образом, не имеет значения, подключен ли монитор к RPi.

Настройка RPi для запуска программы Java

Мы собираемся использовать Xvfb и Fluxbox для предоставления нам виртуального рабочего стола и «x11vnc» для предоставления доступа к виртуальному рабочему столу. Из описания пакета Xvfb Debian:

Xvfb provides an X server that can run on machines with no display hardware and no physical input devices. It emulates a dumb framebuffer using virtual memory.

Установите необходимые пакеты

sudo apt install x11vnc xvfb fluxbox x11-apps

Я предполагаю, что для запуска Java-программы будет использоваться пользователь RPi по умолчанию (pi).

Скрипт для запуска Java-программы

Войдите в RPi через SSH или его физическую консоль (с настоящим монитором и клавиатурой ).

Создайте файл сценария /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 или другого компьютера, доступного по сети, подключитесь к RPi с помощью клиента VNC, мойtigervnc-viewer(Linux ).

vncviewer RPI_IP_ADDRESS

Теперь вы должны увидеть рабочий стол Fluxbox с запущенной программой Java и приложением xclock.

Автоматизация запуска программы Java

Чтобы программа Java всегда запускалась при загрузке RPi, попробуйте один из следующих двух вариантов.

1 )Использовать crontab

Вероятно, лучший вариант для Ubuntu Mate.

Отредактируйте crontab для своего пользователя (pi )и запланируйте запуск программы во время загрузки. В оболочке выполните:

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
18.03.2021, 22:51

Вы можете использоватьxvfb-run:

xvfb-run is a wrapper for the Xvfb(1x) command which simplifies the task of running commands (typically an X client, or a script containing a list of clients to be run) within a virtual X server environment.

Если ваша программа/скрипт /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
1
18.03.2021, 22:51

У меня была такая же ситуация, и я быстро решил ее, установив сервер x2go и клиент x2go.

https://wiki.x2go.org/doku.php

https://wiki.x2go.org/doku.php/wiki:repositories:raspbian

https://www.youtube.com/watch?v=Qzjg8MvdkmA&ab_channel=LawrenceSystems

Я пробовал другие решения, такие как vnc, но они были слишком медленными ^^'

1
18.03.2021, 22:51

Теги

Похожие вопросы