Compare commits

..

3 Commits
main ... 1.0.16

Author SHA1 Message Date
57932fdb40 fixes? 2025-07-18 15:08:42 +01:00
5e08181199 fix: correct typo in schedule service filename
The systemd service for scheduling the screen on/off was misspelled as `kiosk-sechedule-screen.service`.

This commit renames the file to `kiosk-schedule-screen.service` and updates the build script to enable the correctly named service.
2025-07-18 13:31:44 +01:00
6a9d3fdace add hyperion support 2025-07-18 13:24:28 +01:00
15 changed files with 171 additions and 35 deletions

View File

@ -34,6 +34,6 @@ jobs:
append_body: true append_body: true
body_path: ./version-info body_path: ./version-info
files: | files: |
./n-anotterkiosk-* ./anotterkiosk-*
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@ -3,6 +3,7 @@ N-AnotterKiosk (Not-AnotterKiosk)
### I have hacked this about alot from the main branch, mainly Raspberry Pi changes ### I have hacked this about alot from the main branch, mainly Raspberry Pi changes
- Removed x86 support
- Added scheduled screen on/off - Added scheduled screen on/off
- Added scheduled chrome page refresh - Added scheduled chrome page refresh
- Rpi3 Overclock settings - Rpi3 Overclock settings
@ -17,9 +18,10 @@ This project aims to solve a lot of those (at least for the author), it might al
#### Key features #### Key features
- [Images built via CI](https://github.com/Manawyrm/N-AnotterKiosk/blob/main/.github/workflows/main.yml) - [Images built via CI](https://github.com/Manawyrm/AnotterKiosk/blob/main/.github/workflows/main.yml)
- WiFi connection support - WiFi connection support
- Raspberry Pi (Arm64) compatibility - Raspberry Pi (Arm64) compatibility
- PC (x86) compatibility
- [USB flash drive, USB SSD, etc. compatible](#how-to-use) - [USB flash drive, USB SSD, etc. compatible](#how-to-use)
- aarch64 mode for Raspberry Pis (_significant_ performance improvements over armv7/32bit ARM) - aarch64 mode for Raspberry Pis (_significant_ performance improvements over armv7/32bit ARM)
- Read-only filesystem handling (no more broken SD cards) - Read-only filesystem handling (no more broken SD cards)
@ -31,7 +33,6 @@ This project aims to solve a lot of those (at least for the author), it might al
- VNC support - VNC support
- SSH tunneling support (for remote-access without port-forwarding, etc.) - SSH tunneling support (for remote-access without port-forwarding, etc.)
- Basic API for Rpi Actions - Basic API for Rpi Actions
- Hyperion-NG support for ambilight
#### Planned features: #### Planned features:
@ -47,13 +48,13 @@ This project aims to solve a lot of those (at least for the author), it might al
### How-To Use ### How-To Use
Like any other Raspberry Pi image: download the current .img file from the [Releases](https://github.com/Manawyrm/N-AnotterKiosk/releases) page and flash it to a storage device of your choice. Like any other Raspberry Pi image: download the current .img file from the [Releases](https://github.com/Manawyrm/AnotterKiosk/releases) page and flash it to a storage device of your choice.
SD cards, USB flash drives, USB SSDs, SATA SSDs, NVMe SSDs are all good options. SD cards, USB flash drives, USB SSDs, SATA SSDs, NVMe SSDs are all good options.
You can use a tool like the [Raspberry Pi Imager](https://www.raspberrypi.com/software/), [BalenaEtcher](https://etcher.balena.io/), [Win32DiskImager](https://sourceforge.net/projects/win32diskimager/) or plain "dd" on \*nix-like systems. You can use a tool like the [Raspberry Pi Imager](https://www.raspberrypi.com/software/), [BalenaEtcher](https://etcher.balena.io/), [Win32DiskImager](https://sourceforge.net/projects/win32diskimager/) or plain "dd" on \*nix-like systems.
When using the latter two, make sure to extract the .gz compression first (using a tool like 7zip). When using the latter two, make sure to extract the .gz compression first (using a tool like 7zip).
After flashing, re-plug the storage device and open the FAT32 partition. After flashing, re-plug the storage device and open the FAT32 partition.
Open the [`kioskbrowser.ini`](https://github.com/Manawyrm/N-AnotterKiosk/blob/main/kiosk_skeleton/boot/kioskbrowser.ini) file in a text editor and change everything to your needs. Open the [`kioskbrowser.ini`](https://github.com/Manawyrm/AnotterKiosk/blob/main/kiosk_skeleton/boot/kioskbrowser.ini) file in a text editor and change everything to your needs.
More complex WiFi setups (like WPA2-Enterprise) can be configured by creating a wpa_supplicant.conf. More complex WiFi setups (like WPA2-Enterprise) can be configured by creating a wpa_supplicant.conf.
Adding your own SSH keys can be done by creating a authorized_keys file. Adding your own SSH keys can be done by creating a authorized_keys file.
If you want to use the autossh tunneling features, copy an SSH private key as either "id_rsa" or "id_ed25519". If you want to use the autossh tunneling features, copy an SSH private key as either "id_rsa" or "id_ed25519".
@ -122,11 +123,6 @@ Starts the screen-refresh.service to refresh the screen.
`GET /script.php?action=reboot&key=YOUR_API_KEY` `GET /script.php?action=reboot&key=YOUR_API_KEY`
Reboots the Raspberry Pi. Reboots the Raspberry Pi.
### Hyperion-NG
The kiosk now supports Hyperion-NG for ambilight control.
Manage Hyperion via its web interface, which is available on port 8090.
### Inspiration / Other Kiosk-OSes: ### Inspiration / Other Kiosk-OSes:
- https://github.com/jareware/chilipie-kiosk/ - https://github.com/jareware/chilipie-kiosk/

View File

@ -30,7 +30,7 @@ xz -kd raspios.img.xz
# Repartition image # Repartition image
export LIBGUESTFS_BACKEND_SETTINGS=force_tcg export LIBGUESTFS_BACKEND_SETTINGS=force_tcg
truncate -r raspios.img raspikiosk.img truncate -r raspios.img raspikiosk.img
truncate -s +3G raspikiosk.img truncate -s +1G raspikiosk.img
virt-resize --expand /dev/sda2 raspios.img raspikiosk.img virt-resize --expand /dev/sda2 raspios.img raspikiosk.img
rm -f raspios.img rm -f raspios.img
@ -51,7 +51,7 @@ sed -i 's/vfat defaults/vfat ro,defaults/g' "${BUILD_DIR}/etc/fstab"
sed -i 's/ext4 defaults/ext4 ro,defaults/g' "${BUILD_DIR}/etc/fstab" sed -i 's/ext4 defaults/ext4 ro,defaults/g' "${BUILD_DIR}/etc/fstab"
# Include git repo version info # Include git repo version info
echo -n "N-AnotterKiosk Raspberry Pi version: " > "${BUILD_DIR}/version-info" echo -n "AnotterKiosk Raspberry Pi version: " > "${BUILD_DIR}/version-info"
git describe --abbrev=4 --dirty --always --tags >> "${BUILD_DIR}/version-info" git describe --abbrev=4 --dirty --always --tags >> "${BUILD_DIR}/version-info"
# Mount system partitions (from the build host) # Mount system partitions (from the build host)
@ -84,5 +84,5 @@ sudo umount "${BUILD_DIR}"
sudo losetup -D /dev/loop0 sudo losetup -D /dev/loop0
tag=$(git describe --abbrev=4 --dirty --always --tags) tag=$(git describe --abbrev=4 --dirty --always --tags)
mv raspikiosk.img n-anotterkiosk-${tag}-arm64-raspberrypi.img mv raspikiosk.img anotterkiosk-${tag}-arm64-raspberrypi.img
pigz -4 n-anotterkiosk-${tag}-arm64-raspberrypi.img pigz -4 anotterkiosk-${tag}-arm64-raspberrypi.img

90
build_x86.sh Executable file
View File

@ -0,0 +1,90 @@
#!/bin/bash
# *sigh*, some docker containers don't seem to have sbin in their PATH
export PATH=$PATH:/usr/sbin
SCRIPT_DIR="$(dirname "$(realpath "$0")")"
BUILD_DIR="${SCRIPT_DIR}/work/root/"
# cleanup any previous build attempts
umount -fl "${BUILD_DIR}" || true
rm -rf "${BUILD_DIR}" || true
mkdir -p "${BUILD_DIR}"
rm x86kiosk.img || true
truncate -s 10G x86kiosk.img
PARTLAYOUT=$(cat <<-END
label: gpt
label-id: 3BC7D7CD-4BF8-4E92-AAEB-2ACD5F8D05AA
device: x86kiosk.img
unit: sectors
first-lba: 34
last-lba: 20971486
sector-size: 512
x86kiosk.img1 : start= 2048, size= 2095105, type=EBD0A0A2-B9E5-4433-87C0-68B6B72699C7, uuid=9C99F1BB-11A8-4BB5-82C2-555D7A38F85C, name="EFI system partition"
x86kiosk.img2 : start= 2099200, size= 18870272, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=93A9AB2C-BC29-4C6C-B6DD-1B4EDDED9A1E, name="Linux filesystem"
END
)
echo "${PARTLAYOUT}" | sfdisk x86kiosk.img
# Setup loop device for x86 image (with partition scanning)
ld=$(sudo losetup -P --show -f x86kiosk.img)
# Create filesystems
sudo mkfs.ext4 "${ld}p2"
sudo mkfs.fat -F 32 "${ld}p1"
# Mount partitions
sudo mount "${ld}p2" "${BUILD_DIR}"
sudo mkdir "${BUILD_DIR}/boot"
sudo mount "${ld}p1" "${BUILD_DIR}/boot"
# Debootstrap debian
sudo debootstrap --include=linux-image-amd64,grub-efi,sudo --arch amd64 bookworm "${BUILD_DIR}" http://deb.debian.org/debian/
# Copy the skeleton files
sudo rsync -a "${SCRIPT_DIR}/x86_skeleton/." "${BUILD_DIR}"
sudo rsync -a "${SCRIPT_DIR}/kiosk_skeleton/." "${BUILD_DIR}/kiosk_skeleton"
# Create fstab
fat_uuid=$(lsblk -no UUID "${ld}p1")
ext_uuid=$(lsblk -no UUID "${ld}p2")
echo "UUID=${fat_uuid} /boot vfat ro,defaults 0 2" | sudo tee "${BUILD_DIR}/etc/fstab"
echo "UUID=${ext_uuid} / ext4 ro,defaults,noatime 0 1" | sudo tee -a "${BUILD_DIR}/etc/fstab"
# Include git repo version info
echo -n "AnotterKiosk x86 version: " > "${BUILD_DIR}/version-info"
git describe --abbrev=4 --dirty --always --tags >> "${BUILD_DIR}/version-info"
# Mount system partitions (from the build host)
sudo mount proc -t proc -o nosuid,noexec,nodev "${BUILD_DIR}/proc/"
sudo mount sys -t sysfs -o nosuid,noexec,nodev,ro "${BUILD_DIR}/sys/"
sudo mount devpts -t devtmpfs -o mode=0755,nosuid "${BUILD_DIR}/dev/"
# and then actually install everything.
sudo chroot "${BUILD_DIR}" /setup.sh
sudo chroot "${BUILD_DIR}" /kiosk_skeleton/build.sh
sudo rm -r "${BUILD_DIR}/kiosk_skeleton"
cp "${BUILD_DIR}/version-info" version-info
sudo umount -fl "${BUILD_DIR}/proc"
sudo umount -fl "${BUILD_DIR}/sys"
sudo umount -fl "${BUILD_DIR}/dev"
sudo umount "${BUILD_DIR}/proc"
sudo umount "${BUILD_DIR}/sys"
sudo umount "${BUILD_DIR}/dev"
sudo umount "${BUILD_DIR}/boot"
sudo umount "${BUILD_DIR}"
sudo losetup -D "${ld}"
tag=$(git describe --abbrev=4 --dirty --always --tags)
mv x86kiosk.img anotterkiosk-${tag}-x86.img
pigz -4 anotterkiosk-${tag}-x86.img

View File

@ -3,7 +3,7 @@
apt update apt update
APT_LISTCHANGES_FRONTEND=none DEBIAN_FRONTEND=noninteractive apt dist-upgrade -y APT_LISTCHANGES_FRONTEND=none DEBIAN_FRONTEND=noninteractive apt dist-upgrade -y
DEBIAN_FRONTEND=noninteractive apt install -y lightdm openbox nginx php-fpm php-cli chromium autossh unclutter x11-xserver-utils xdotool htop nano openssh-server rsync x11vnc lm-sensors ntpdate scrot wireless-regdb fontconfig DEBIAN_FRONTEND=noninteractive apt install -y lightdm openbox nginx php-fpm php-cli chromium autossh unclutter x11-xserver-utils xdotool htop nano openssh-server rsync x11vnc lm-sensors ntpdate scrot wireless-regdb fontconfig curl gpg
rsync -a --chown=root:root "/kiosk_skeleton/." "/" rsync -a --chown=root:root "/kiosk_skeleton/." "/"
@ -78,23 +78,17 @@ systemctl enable ntpdate
systemctl enable lightdm systemctl enable lightdm
systemctl enable nginx systemctl enable nginx
systemctl enable ssh systemctl enable ssh
systemctl enable kiosk-sechedule-screen.service systemctl enable kiosk-schedule-screen.service
systemctl enable schedule-reboot.service systemctl enable schedule-reboot.service
systemctl enable setup-refresh-timer.service systemctl enable setup-refresh-timer.service
systemctl enable hyperiond
# Install Hyperion # Install Hyperion
curl -sSL https://apt.hyperion-project.org/hyperion.pub.key | gpg --dearmor -o /usr/share/keyrings/hyperion.pub.gpg curl -sSL https://apt.hyperion-project.org/hyperion.pub.key | gpg --dearmor -o /usr/share/keyrings/hyperion.pub.gpg
echo "deb [signed-by=/usr/share/keyrings/hyperion.pub.gpg] https://apt.hyperion-project.org/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/hyperion.list echo "deb [signed-by=/usr/share/keyrings/hyperion.pub.gpg] https://apt.hyperion-project.org/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/hyperion.list
apt update apt update
apt install -y hyperion apt install -y hyperion
systemctl enable hyperion
# Run Hyperion as the 'pi' user
mkdir -p /etc/systemd/system/hyperiond.service.d
echo -e "[Service]\nUser=pi\nGroup=pi" > /etc/systemd/system/hyperiond.service.d/override.conf
chown -R pi:pi /var/lib/hyperion || true
chown -R pi:pi /etc/hyperion
usermod -a -G video pi
# generate a version info/build info file # generate a version info/build info file
echo -n "Chromium version: " >> /version-info echo -n "Chromium version: " >> /version-info
@ -103,7 +97,3 @@ dpkg --list | grep "ii chromium " >> /version-info
echo -n "Linux kernel version: " >> /version-info echo -n "Linux kernel version: " >> /version-info
ls /lib/modules/ | sort -r | head -n 1 >> /version-info ls /lib/modules/ | sort -r | head -n 1 >> /version-info
echo >> /version-info echo >> /version-info
# Clean up apt cache and remove unused packages
apt-get clean
apt-get autoremove -y

View File

@ -0,0 +1,22 @@
{
"general": {
"name": "AnotterKiosk"
},
"grabber": {
"type": "framebuffer",
"device": "/dev/fb0",
"pixelformat": "rgb24"
},
"leds": [
{
"type": "ws281x",
"gpio": 18,
"dmanum": 10,
"freq": 800000,
"leds": 256,
"rewriteTime": 1000,
"rgbw": false,
"strip": "GRB"
}
]
}

View File

@ -1,2 +1,2 @@
N-AnotterKiosk \n \l AnotterKiosk \n \l

View File

@ -1,3 +1,4 @@
Welcome to N-AnotterKiosk! Welcome to AnotterKiosk!
Run "mount -o remount,rw /" to make the root filesystem writeable.
FAT32 / config partition is located in /boot. FAT32 / config partition is located in /boot.

View File

@ -1,5 +1,4 @@
<h1>Kioskbrowser</h1> <h1>Kioskbrowser</h1>
<h2>Version: <?php echo exec('git describe --tags --abbrev=0'); ?></h2>
CPU temperature: <br> CPU temperature: <br>
<?php passthru("sudo vcgencmd measure_temp"); ?> <?php passthru("sudo vcgencmd measure_temp"); ?>

View File

@ -1 +1 @@
console=serial0,115200 console=tty1 root=PARTUUID=544c6228-02 rootfstype=ext4 rw rootwait logo.nologo consoleblank=0 loglevel=0 quiet console=serial0,115200 console=tty1 root=PARTUUID=544c6228-02 rootfstype=ext4 ro rootwait logo.nologo consoleblank=0 loglevel=0 quiet

View File

@ -7,11 +7,11 @@
# uncomment to force a console size. By default it will be display's size minus # uncomment to force a console size. By default it will be display's size minus
# overscan. # overscan.
#framebuffer_width=1280 framebuffer_width=1920
#framebuffer_height=720 framebuffer_height=1080
# uncomment if hdmi display is not detected and composite is being output # uncomment if hdmi display is not detected and composite is being output
#hdmi_force_hotplug=1 hdmi_force_hotplug=1
# uncomment to force a specific HDMI mode (this will force VGA) # uncomment to force a specific HDMI mode (this will force VGA)
#hdmi_group=1 #hdmi_group=1
@ -29,6 +29,7 @@ enable_uart=1
disable_splash=1 disable_splash=1
dtparam=audio=on dtparam=audio=on
gpu_mem=256 gpu_mem=256
#dtparam=spi=on
# Enable DRM VC4 V3D driver # Enable DRM VC4 V3D driver
#dtoverlay=vc4-kms-v3d #dtoverlay=vc4-kms-v3d

View File

@ -0,0 +1,10 @@
deb http://deb.debian.org/debian bookworm main
deb-src http://deb.debian.org/debian bookworm main
deb http://deb.debian.org/debian-security/ bookworm-security main
deb-src http://deb.debian.org/debian-security/ bookworm-security main
deb http://deb.debian.org/debian bookworm-updates main
deb-src http://deb.debian.org/debian bookworm-updates main
deb http://deb.debian.org/debian bookworm-backports main

View File

@ -0,0 +1 @@
GRUB_DISTRIBUTOR="AnotterKiosk"

26
x86_skeleton/setup.sh Executable file
View File

@ -0,0 +1,26 @@
#!/bin/bash
apt update
# make sure we have all updates installed (from the -updates and -security repos)
APT_LISTCHANGES_FRONTEND=none DEBIAN_FRONTEND=noninteractive apt -o Dpkg::Options::="--force-confold" -f -y dist-upgrade
APT_LISTCHANGES_FRONTEND=none DEBIAN_FRONTEND=noninteractive apt install -f -y -t bookworm-backports linux-image-amd64
# to remove old kernel versions
apt --purge autoremove
apt install -y polkitd locales zstd dhcpcd wpasupplicant xserver-xorg-video-nouveau
locale-gen en_US.UTF-8
apt install -y firmware-amd-graphics firmware-iwlwifi firmware-brcm80211 firmware-atheros firmware-misc-nonfree firmware-realtek firmware-ath9k-htc
echo "grub-efi-amd64 grub2/force_efi_extra_removable boolean true" | debconf-set-selections
update-grub
grub-install --target=x86_64-efi --efi-directory=/boot --removable --bootloader-id=AnotterKiosk
useradd -U -m -s /bin/bash -u 1000 -G audio,video,users,input,adm,dialout,plugdev,render pi
systemctl enable dhcpcd
rm /etc/resolv.conf
echo "nameserver 8.8.8.8" > /etc/resolv.conf
echo "nameserver 2001:4860:4860::8888" >> /etc/resolv.conf
echo "nameserver 8.8.4.4" >> /etc/resolv.conf
echo "nameserver 2001:4860:4860::8844" >> /etc/resolv.conf