|
|
#!/usr/bin/env bash |
|
|
set -Eeuo pipefail |
|
|
|
|
|
|
|
|
|
|
|
: "${GPU:="N"}" |
|
|
: "${VGA:="virtio"}" |
|
|
: "${DISPLAY:="web"}" |
|
|
: "${RENDERNODE:="/dev/dri/renderD128"}" |
|
|
|
|
|
port=$(( VNC_PORT - 5900 )) |
|
|
[[ "$DISPLAY" == ":0" ]] && DISPLAY="web" |
|
|
|
|
|
case "${DISPLAY,,}" in |
|
|
"vnc" ) |
|
|
DISPLAY_OPTS="-display vnc=:$port -vga $VGA" |
|
|
;; |
|
|
"web" ) |
|
|
DISPLAY_OPTS="-display vnc=:$port,websocket=$WSS_PORT -vga $VGA" |
|
|
;; |
|
|
"disabled" ) |
|
|
DISPLAY_OPTS="-display none -vga $VGA" |
|
|
;; |
|
|
"none" ) |
|
|
DISPLAY_OPTS="-display none -vga none" |
|
|
;; |
|
|
*) |
|
|
DISPLAY_OPTS="-display $DISPLAY -vga $VGA" |
|
|
;; |
|
|
esac |
|
|
|
|
|
if [[ "$GPU" != [Yy1]* || "$ARCH" != "amd64" ]]; then |
|
|
return 0 |
|
|
fi |
|
|
|
|
|
CPU_VENDOR=$(lscpu | awk '/Vendor ID/{print $3}') |
|
|
|
|
|
if [[ "$CPU_VENDOR" != "GenuineIntel" ]]; then |
|
|
return 0 |
|
|
fi |
|
|
|
|
|
msg="Configuring display drivers..." |
|
|
html "$msg" |
|
|
[[ "$DEBUG" == [Yy1]* ]] && echo "$msg" |
|
|
|
|
|
[[ "${VGA,,}" == "virtio" ]] && VGA="virtio-vga-gl" |
|
|
DISPLAY_OPTS="-display egl-headless,rendernode=$RENDERNODE" |
|
|
DISPLAY_OPTS+=" -device $VGA" |
|
|
|
|
|
[[ "${DISPLAY,,}" == "vnc" ]] && DISPLAY_OPTS+=" -vnc :$port" |
|
|
[[ "${DISPLAY,,}" == "web" ]] && DISPLAY_OPTS+=" -vnc :$port,websocket=$WSS_PORT" |
|
|
|
|
|
[ ! -d /dev/dri ] && mkdir -m 755 /dev/dri |
|
|
|
|
|
|
|
|
CARD_NUMBER=$(echo "$RENDERNODE" | grep -oP '(?<=renderD)\d+') |
|
|
CARD_DEVICE="/dev/dri/card$((CARD_NUMBER - 128))" |
|
|
|
|
|
if [ ! -c "$CARD_DEVICE" ]; then |
|
|
if mknod "$CARD_DEVICE" c 226 $((CARD_NUMBER - 128)); then |
|
|
chmod 666 "$CARD_DEVICE" |
|
|
fi |
|
|
fi |
|
|
|
|
|
if [ ! -c "$RENDERNODE" ]; then |
|
|
if mknod "$RENDERNODE" c 226 "$CARD_NUMBER"; then |
|
|
chmod 666 "$RENDERNODE" |
|
|
fi |
|
|
fi |
|
|
|
|
|
addPackage "xserver-xorg-video-intel" "Intel GPU drivers" |
|
|
addPackage "qemu-system-modules-opengl" "OpenGL module" |
|
|
|