Saya ingin berbagi pengalaman saya menyiapkan Raspberry Pi 3B + sebagai kios dengan GUI berdasarkan pustaka Kivy untuk Python 3. Mengapa Kivy? Hanya saja kami sudah memiliki produk yang dikembangkan dengan Python, kami ingin menambahkan antarmuka grafis ke dalamnya. Perlu dicatat bahwa sebelum Kivy, kami mencoba beberapa opsi, termasuk wxWidgets dan bahkan browser Chromium dengan aplikasi web. Semua alternatif ini terbukti tidak berdaya melawan Kivy, ringan dan cepat. Gambaran yang sangat bagus tentang perpustakaan ini sudah ada di Habré .
Lingkungan Hidup
Kami akan menggunakan Raspbian Lite dengan Python 3.7 dan proses Supervisor dan sistem manajemen layanan. Omong-omong, utilitas Raspberry Pi Imager sangat nyaman , yang dengannya Anda dapat menyiapkan kartu SD. Setelah mengunduh pertama RPi bayi kami, kami masuk menggunakan login pi standar dan kata sandi raspberry . Kemudian kami mengeksekusi:
$ sudo raspi-config
Kami memilih item kelima Interfacing Options , di menu yang muncul kami tertarik pada item kedua SSH , yang dengannya kami akan mengaktifkan akses jarak jauh untuk kenyamanan.
Jadi, bersandar dengan nyaman di kursi favorit Anda, kami akan terus mengkonfigurasi RPi melalui klien ssh yang nyaman.
Pengguna
Mari buat pengguna dengan nama yang nyaman bagi kita, izinkan dia menggunakan sudo dan reboot:
$ sudo useradd -m kivygui -s /bin/bash
$ sudo passwd kivygui
$ sudo usermod -a -G sudo kivygui
$ sudo reboot
Setelah reboot, masuk melalui ssh dengan data baru untuk kivygui dan hapus akun pi standar :
$ sudo userdel pi
$ sudo rm -r /home/pi/
Tidak akan berlebihan untuk menunjukkan bahwa kami menggunakan tata letak keyboard Amerika:
$ sudo sed -i 's/XKBLAYOUT="gb"/XKBLAYOUT="us"/' /etc/default/keyboard
Uji aplikasi
Aplikasi uji kita akan berada di folder terpisah, mari kita buat:
$ mkdir /home/kivygui/helloworld
Sekarang, di editor teks nano , mari buat skrip untuk menjalankan aplikasi Python /home/kivygui/helloworld/run.sh dengan konten berikut:
export DISPLAY=:0.0
xset s off -dpms
exec matchbox-window-manager &
while true; do
exec python3 start.py
done
Mari buat di nano dan contoh antarmuka sederhana di file /home/kivygui/helloworld/start.py:
import kivy
kivy.require('1.11.0')
from kivy.app import App
from kivy.uix.label import Label
class MyApp(App):
def build(self):
return Label(text='Hello, world!')
if __name__ == '__main__':
MyApp().run()
Antarmuka pengguna grafis
Kami membutuhkan pip3 :
$ sudo apt-get update -y
$ sudo apt-get install -y python3-pip
Saya juga menemukan fakta bahwa ketika menginstal nodm, semua paket yang diperlukan tidak selalu diunduh, jadi untuk berjaga-jaga, kami akan menginstalnya terlebih dahulu:
$ sudo apt-get install -y desktop-base gtk2-engines-pixbuf libxklavier16 xserver-xorg xserver-xorg-input-all xserver-xorg-input-libinput xserver-xorg-input-wacom xserver-xorg-legacy xserver-xorg-video-all xserver-xorg-video-amdgpu xserver-xorg-video-ati xserver-xorg-video-fbdev xserver-xorg-video-nouveau xserver-xorg-video-radeon xserver-xorg-video-vesa
Sekarang mari kita atur kotak korek api nodm dan window manager :
$ sudo DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true apt-get install -y x11-xserver-utils nodm matchbox-window-manager
$ echo "/usr/sbin/nodm" | sudo tee /etc/X11/default-display-manager
$ sudo sed -i -e "s/NODM_ENABLED=false/NODM_ENABLED=true/" -e "s/NODM_USER=root/NODM_USER=kivygui/" -e "s/NODM_X_OPTIONS='-nolisten tcp'/NODM_X_OPTIONS='-nolisten tcp -nocursor'/" /etc/default/nodm
Sekarang Kivy ini giliran :
$ sudo apt-get install -y libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev pkg-config libgl1-mesa-dev libgles2-mesa-dev python-setuptools libgstreamer1.0-dev git-core gstreamer1.0-plugins-{bad,base,good,ugly} gstreamer1.0-{omx,alsa} python-dev libmtdev-dev xclip xsel libjpeg-dev
$ sudo python3 -m pip install --user kivy
Sekarang kami akan mengajarkan sistem kami untuk menunjukkan kepada kami antarmuka grafis alih-alih prompt konsol, menyembunyikan semua pesan diagnostik dan menampilkan layar boot sistem grafis:
$ sudo rm /etc/systemd/system/default.target
$ sudo rm /etc/systemd/system/getty@tty1.service.d/autologin.conf
$ sudo ln -s /lib/systemd/system/graphical.target /etc/systemd/system/default.target
$ sudo sed -i '$ s/$/ quiet splash consoleblank=0 loglevel=0 logo.nologo plymouth.ignore-serial-consoles/' /boot/cmdline.txt
$ sudo sed -i 's/console=tty1/console=tty3/' /boot/cmdline.txt
Jika diinginkan, konsol tty1 dapat dinonaktifkan sama sekali:
$ sudo systemctl disable getty@tty1
Pengawas d
Sekarang mari instal Supervisor :
$ sudo apt-get install -y supervisor
Mari buat folder untuk log:
$ mkdir /home/kivygui/logs
Sekarang, mari hentikan layanan Supervisor untuk sementara untuk mengkonfigurasi ulang:
$ sudo systemctl stop supervisor
Tambahkan berikut ini ke file konfigurasi /etc/supervisor/supervisord.conf menggunakan nano editor :
[program:rungui]
command=sh run.sh
directory=/home/kivygui/helloworld
user=root
autostart=true
autorestart=true
startsecs = 5
startretries=3
stderr_logfile=/home/kivygui/logs/rungui.err.log
stdout_logfile=/home/kivygui/logs/rungui.out.log
stderr_logfile_maxbytes=5MB
stdout_logfile_maxbytes=5MB
stopsignal=INT
stopwaitsecs=5
Juga, mari berikan kivygui dan pengguna root beberapa opsi tambahan. Untuk melakukan ini, gunakan perintah:
$ sudo visudo
Mari kita bawa file ke bentuk berikut:
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
kivygui ALL=(ALL:ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
kivygui ALL = NOPASSWD: /usr/bin/supervisorctl
kivygui ALL = NOPASSWD: /usr/bin/python3.7
kivygui ALL=(ALL) NOPASSWD: /bin/systemctl daemon-reload
kivygui ALL=(ALL) NOPASSWD: /usr/bin/supervisord
root ALL=(ALL) NOPASSWD: /bin/systemctl daemon-reload
root ALL = NOPASSWD: /usr/bin/supervisorctl
root ALL = NOPASSWD: /usr/bin/python3.7
root ALL=(ALL) NOPASSWD: /usr/bin/supervisord
Sekarang kita bisa memulai layanan:
$ sudo systemctl start supervisor
Di monitor yang terhubung ke RPi, kita akan melihat salam yang disayangi. Yang tersisa hanyalah reboot untuk menguji layar boot grafis.
PS
Bahkan, nodm bisa menggantikan lightdm dengan autologin . Ini akan sangat mirip dengan solusi nodm . Selain itu, pengembang NODM sendiri merekomendasikan pendekatan ini.