diff --git a/astroarch_build.sh b/astroarch_build.sh index b78c125..fed9bbc 100644 --- a/astroarch_build.sh +++ b/astroarch_build.sh @@ -72,7 +72,7 @@ else qt6-serialport qt6ct udisks2 xorg-fonts-misc fuse2 \ fortune-mod cowsay pacman-contrib arandr neofetch \ astromonitor kscreen sddm-kcm flatpak plasma-x11-session \ - kdialog jq astroarch-onboarding dhcpcd iw rsync xrdp xorgxrdp fakeroot --noconfirm --ask 4 + kdialog jq astroarch-onboarding dhcpcd iw rsync xrdp xorgxrdp astroarch-bridge --noconfirm --ask 4 fi @@ -153,9 +153,6 @@ cp /home/astronaut/.astroarch/configs/81-wifi-powersave.rules /etc/udev/rules.d/ # Udev rule to force the brcmfmac driver to keep the name β€œwlan0” for Wi-Fi cp /home/astronaut/.astroarch/configs/99-brcmfmac.rules /etc/udev/rules.d/99-brcmfmac.rules -# Copy the GPIO ownership rule to get access to the GPIO as any user -cp /home/astronaut/.astroarch/configs/99-arch-gpio.rules /etc/udev/rules.d/99-arch-gpio.rules - # Polkit rules go here cp /home/astronaut/.astroarch/configs/99-polkit-power.rules /etc/polkit-1/rules.d/ cp /home/astronaut/.astroarch/configs/50-udiskie.rules /etc/polkit-1/rules.d/ @@ -194,8 +191,8 @@ chmod 755 /etc/xrdp/key.pem sed -i 's|#tcp_send_buffer_bytes=32768|tcp_send_buffer_bytes= 4194304|g' /etc/xrdp/xrdp.ini # Prevents XRDP from creating a second virtual desktop for the same user -sudo sed -i 's/^Policy=.*/Policy=UHQ/' /etc/xrdp/sesman.ini -sudo sed -i '/^\[Xorg\]/a fork=true' /etc/xrdp/xrdp.ini +sed -i 's/^Policy=.*/Policy=UHQ/' /etc/xrdp/sesman.ini +sed -i '/^\[Xorg\]/a fork=true' /etc/xrdp/xrdp.ini # Disables the display's power management features sed -i 's/Option "DPMS"/& "false"/' /etc/X11/xrdp/xorg.conf @@ -203,7 +200,7 @@ sed -i 's/Option "DPMS"/& "false"/' /etc/X11/xrdp/xorg.conf # Disabling compression can speed up local connections on low-power devices sed -i 's|bitmap_compression=true|bitmap_compression=false|g' /etc/xrdp/xrdp.ini sed -i 's|bulk_compression=true|bulk_compression=false|g' /etc/xrdp/xrdp.ini -sudo awk '1; /^tcp_keepalive=true$/ {print "\n; Turn off compression\nrfx_codec=false\njpeg_codec=false"}' /etc/xrdp/xrdp.ini > /tmp/xrdp.ini.tmp && sudo mv /tmp/xrdp.ini.tmp /etc/xrdp/xrdp.ini +awk '1; /^tcp_keepalive=true$/ {print "\n; Turn off compression\nrfx_codec=false\njpeg_codec=false"}' /etc/xrdp/xrdp.ini > /tmp/xrdp.ini.tmp && sudo mv /tmp/xrdp.ini.tmp /etc/xrdp/xrdp.ini # Improve xrdp & network cp /home/astronaut/.astroarch/configs/99-sysctl.conf /etc/sysctl.d @@ -336,6 +333,11 @@ chmod -R 770 /home/astronaut # Copy the screensaver config, by default it is off su astronaut-kiosk -c "cp /home/astronaut/.astroarch/configs/kscreenlockerrc /home/astronaut-kiosk/.config/kscreenlockerrc" +# Pre-launch of the Kiosk session +sed -i '1s/^/auth sufficient pam_succeed_if.so user = astronaut-kiosk\n/' /etc/pam.d/xrdp-sesman +cp /home/astronaut/.astroarch/systemd/xrdp-autostart-kiosk.service /etc/systemd/system/xrdp-autostart-kiosk.service +ln -s /etc/systemd/system/xrdp-autostart-kiosk.service /etc/systemd/system/multi-user.target.wants/xrdp-autostart-kiosk.service + # Disable Kwallet by default su astronaut -c "echo $'[Wallet]\nEnabled=false' > /home/astronaut/.config/kwalletrc" diff --git a/plugins/astroarch-bridge/astroarch-bridge.plugin.zsh b/plugins/astroarch-bridge/astroarch-bridge.plugin.zsh new file mode 100644 index 0000000..cc998b4 --- /dev/null +++ b/plugins/astroarch-bridge/astroarch-bridge.plugin.zsh @@ -0,0 +1,55 @@ +function _check_astroarch-bridge_installed() +{ + if pacman -Qs 'astroarch-bridge' > /dev/null ; then + echo "βœ… astroarch-bridge packages are already installed" + notify-send --app-name 'AstroArch' --icon="/home/astronaut/.astroarch/assets/icons/novnc-icon.svg" -t 10000 'astroarch-bridge' "βœ… astroarch-bridge packages are already installed" + else + echo "πŸ“¦ astroarch-brige packages not installed, installing them now..." + notify-send --app-name 'AstroArch' --icon="/home/astronaut/.astroarch/assets/icons/novnc-icon.svg" -t 10000 'astroarch-bridge' "πŸ“¦ astroarch-bridge packages not installed, installing them now..." + yes | LC_ALL=en_US.UTF-8 sudo pacman -S astroarch-bridge + echo "βœ… astroarch-bridge packages installed!" + notify-send --app-name 'AstroArch' --icon="/home/astronaut/.astroarch/assets/icons/novnc-icon.svg" -t 10000 'astroarch-bridge' "βœ… astroarch-bridge packages installed!" + fi +} + +function astroarch-bridge_astronaut_on() +{ + _check_astroarch-bridge_installed + mkdir -p /home/astronaut/.config/systemd/user/default.target.wants + ln -sf /usr/lib/systemd/user/astroarch-bridge.service \ + "/home/astronaut/.config/systemd/user/default.target.wants/astroarch-bridge.service" + echo "πŸŽ‰ astroarch-bridge will be active after the next reboot" + notify-send --app-name 'AstroArch' --icon="/home/astronaut/.astroarch/assets/icons/novnc-icon.svg" -t 10000 'astroarch-bridge' "πŸŽ‰ astroarch-bridge will be active after the next reboot" +} + +function astroarch-bridge_astronaut_off() +{ + rm -f /home/astronaut/.config/systemd/user/default.target.wants/astroarch-bridge.service + echo "πŸ›‘ astroarch-bridge disabled. Remember to re-enable it if you want it to start automatically at boot" + notify-send --app-name 'AstroArch' --icon="/home/astronaut/.astroarch/assets/icons/novnc-icon.svg" -t 10000 'astroarch-bridge' "πŸ›‘ astroarch-bridge disabled. Remember to re-enable it if you want it to start automatically at boot" +} + +function astroarch-bridge_astronaut-kiosk_on() +{ + _check_astroarch-bridge_installed + su astronaut-kiosk -c "mkdir -p /home/astronaut-kiosk/.config/systemd/user/default.target.wants && \ + ln -sf /usr/lib/systemd/user/astroarch-bridge.service /home/astronaut-kiosk/.config/systemd/user/default.target.wants/astroarch-bridge.service" + echo "πŸŽ‰ astroarch-bridge will be active after the next reboot" + notify-send --app-name 'AstroArch' --icon="/home/astronaut/.astroarch/assets/icons/novnc-icon.svg" -t 10000 'astroarch-bridge' "πŸŽ‰ astroarch-bridge will be active after the next reboot" +} + +function astroarch-bridge_astronaut-kiosk_off() +{ + su astronaut-kiosk -c "rm -f /home/astronaut-kiosk/.config/systemd/user/default.target.wants/astroarch-bridge.service" + echo "πŸ›‘ astroarch-bridge disabled. Remember to re-enable it if you want it to start automatically at boot" + notify-send --app-name 'AstroArch' --icon="/home/astronaut/.astroarch/assets/icons/novnc-icon.svg" -t 10000 'astroarch-bridge' "πŸ›‘ astroarch-bridge disabled. Remember to re-enable it if you want it to start automatically at boot" +} + +function astroarch-bridge_remove() +{ + rm -f /home/astronaut/.config/systemd/user/default.target.wants/astroarch-bridge.service + su astronaut-kiosk -c "rm -f /home/astronaut-kiosk/.config/systemd/user/default.target.wants/astroarch-bridge.service" + yes | LC_ALL=en_US.UTF-8 sudo pacman -Rcs astroarch-bridge + echo "πŸ—‘οΈ astroarch-bridge remove" + notify-send --app-name 'AstroArch' --icon="/home/astronaut/.astroarch/assets/icons/novnc-icon.svg" -t 10000 'astroarch-bridge' "πŸ—‘οΈ astroarch-bridge remove" +} diff --git a/scripts/2.0.10.sh b/scripts/2.0.10.sh new file mode 100644 index 0000000..f02cd63 --- /dev/null +++ b/scripts/2.0.10.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +# Invoke 2.0.9 +bash /home/astronaut/.astroarch/scripts/2.0.9.sh + +# Install astroarch-bridge for the astronaut and astronaut-kiosk users +sudo pacman -Sy astroarch-bridge --noconfirm + +# Pre-launch of the Kiosk session +sudo sed -i '1s/^/auth sufficient pam_succeed_if.so user = astronaut-kiosk\n/' /etc/pam.d/xrdp-sesman +sudo cp -f /home/astronaut/.astroarch/systemd/xrdp-autostart-kiosk.service /etc/systemd/system/xrdp-autostart-kiosk.service +sudo ln -sf /etc/systemd/system/xrdp-autostart-kiosk.service /etc/systemd/system/multi-user.target.wants/xrdp-autostart-kiosk.service +sudo systemctl enable xrdp-autostart-kiosk.service diff --git a/scripts/prelaunch-kiosk-session.sh b/scripts/prelaunch-kiosk-session.sh new file mode 100755 index 0000000..12cf560 --- /dev/null +++ b/scripts/prelaunch-kiosk-session.sh @@ -0,0 +1,7 @@ +# /usr/local/bin/prelaunch-kiosk-session.sh +#!/usr/bin/expect -f + +spawn /usr/bin/xrdp-sesrun astronaut-kiosk +expect "Password:" +send "\r" +expect eof diff --git a/systemd/xrdp-autostart-kiosk.service b/systemd/xrdp-autostart-kiosk.service new file mode 100644 index 0000000..5910a1e --- /dev/null +++ b/systemd/xrdp-autostart-kiosk.service @@ -0,0 +1,14 @@ +# /etc/systemd/system/prelaunch-kiosk-session.service +[Unit] +Description=Pre-launch xrdp session for astronaut-kiosk +After=xrdp-sesman.service xrdp.service +Wants=xrdp-sesman.service xrdp.service + +[Service] +Type=oneshot +ExecStart=/home/astronaut/.astroarch/scripts/prelaunch-kiosk-session.sh +RemainAfterExit=yes +User=root + +[Install] +WantedBy=multi-user.target