我是使用覆盆子的新手,我正在使用 chilipie-kiosk 在覆盆子 pi 上开发一个信息亭。这个想法是,当 Raspberry Pi 启动时,Chromium 浏览器将启动,并带有我们在 Apache 服务器(本地主机)上的页面。我们通过以下配置(.xsession)实现这一切:
#!/bin/bash
## Establece la variable de entorno DISPLAY para que los programas X11 sepan dónde mostrar su interfaz gráfica. En este caso, :0.0 indica que el servidor de visualización X11 local está en la pantalla 0.
export DISPLAY=:0.0
# Start cursor at the top-left corner, as opposed to the default of dead-center
# (so it doesn't accidentally trigger hover styles on elements on the page)
xdotool mousemove 0 0
# Set some useful X preferences
xset s off # don't activate screensaver
xset -dpms # disable DPMS (Energy Star) features.
xset s noblank # don't blank the video device
# Set X screen background: Unicornio
sudo nitrogen --set-centered background.png
# Hide cursor afer 5 seconds of inactivity
unclutter -idle 5 -root &
# Make sure Chromium profile is marked clean, even if it crashed
# Verifica si el archivo de preferencias de chromium existe: .config/chromium/Default/
if [ -f .config/chromium/Default/Preferences ]; then
# Existe: cat .config/chromium/Default/Preferences (en la .5 existe este archivo)
# jq procesa el json de preferencias y se cambian exit_type y exited_cleanly
# Se redirige la salida del comando jq a .config/chromium/Default/Preferences-clean
cat .config/chromium/Default/Preferences \
| jq '.profile.exit_type = "SessionEnded" | .profile.exited_cleanly = true' \
> .config/chromium/Default/Preferences-clean
# Se renombra el archivo eliminando la extension -clean del nombre del archivo
mv .config/chromium/Default/Preferences{-clean,}
fi
# Remove notes of previous sessions, if any
# Busca y elimina cualquier archivo dentro del directorio .config/chromium/ cuyo nombre comience con "Last
find .config/chromium/ -name "Last *" -exec rm {} +
# Get URL from file (if set)
URL=""
# no parece que exista en .5: /boot/chilipie_url.txt
if [ -f /boot/chilipie_url.txt ]; then
URL="$(head -n 1 /boot/chilipie_url.txt)"
elif [ -f /home/pi/chilipie_url.txt ]; then
# Extrae la primera linea
URL="$(head -n 1 /home/pi/chilipie_url.txt)"
fi
if [ -n "$URL" ]; then
# URL no vacia: Obtiene el numero de serie de la raspberry pi
SERIAL="$(cat /proc/cpuinfo | grep Serial | cut -d ' ' -f 2 | xargs)" # Get serial number
# Reemplaza la variable SERIAL en la URL (si está presente) con el número de serie del dispositivo: http://example.com/?serial=$SERIAL deberia cambiar por http://example.com/?serial=10000000f9f937b8
URL="$(echo $URL | SERIAL=$SERIAL envsubst '$SERIAL')"
fi
# Start and detach Chromium
# http://peter.sh/experiments/chromium-command-line-switches/
# Note that under matchbox, starting in full-screen without a window size doesn't behave well when you try to exit full screen (see https://unix.stackexchange.com/q/273989)
chromium-browser \
--start-fullscreen \
--window-position=9000,9000 \
--disable-infobars \
--kiosk\
--overscroll-history-navigation=0 \
--check-for-update-interval=1 --simulate-critical-update \ $URL &
# See https://github.com/futurice/chilipie-kiosk/issues/99#issuecomment-597119842 for
# the need for the fishy-sounding "--check-for-update-interval=1
# --simulate-critical-update" switches; TODO: remove when not needed
# Hide Chromium while it's starting/loading the page
wid=`xdotool search --sync --onlyvisible --class chromium`
xdotool windowunmap $wid
sleep 10 # give the web page time to load
xdotool windowmap $wid
# Finally, switch process to our window manager
exec matchbox-window-manager -use_titlebar no
到目前为止,它似乎运行良好。
我有 java 代码,其中执行时,我希望它更改显示的本地网站并向我显示 google.es:
String url = "https://www.google.com/?hl=es";
// Comando para abrir Chromium en modo kiosco con la URL de Google
String command = "chromium-browser --start-fullscreen --kiosk --new-window --no-sandbox " + url;
// Ejecutar el comando en el sistema operativo
Process process = Runtime.getRuntime().exec(command);
LogManager.getInstance().println(LogManager.INFO, "intenta ejecutar la llamada a google.es");
// Capturar la salida de Chromium
InputStream inputStream = process.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
// Capturar la salida de error de Chromium
InputStream errorStream = process.getErrorStream();
BufferedReader errorReader = new BufferedReader(new InputStreamReader(errorStream));
String line = "";
while ((line = reader.readLine()) != null) {
LogManager.getInstance().println(LogManager.INFO, "Salida estándar: " + line);
}
while ((line = errorReader.readLine()) != null) {
LogManager.getInstance().println(LogManager.ERROR, "Salida de error: " + line);
}
但是,我总是收到错误:
[2099:2099:0322/164415.631324:ERROR:ozone_platform_x11.cc(243)] Missing X server or $DISPLAY
03/22/2024 16:44:15 --> ERROR: [2099:2099:0322/164415.631658:ERROR:env.cc(257)] The platform failed to initialize. Exiting.
我通过 ssh 使用用户 pi 连接到树莓派。我修改了/etc/environment并添加了DISPLAY=:0。我也在/etc/environment.d/90qt-a11y.conf中完成了它
在/etc/X11/Xwrapper.config我已经设置 allowed_users=anybody
如果我跑主机我有:
access control enabled, only authorized clients can connect
YES:localuser:pi
从我的无知来看,一切似乎都很好。
有人帮我解决这个错误