156 lines
4.1 KiB
YAML
156 lines
4.1 KiB
YAML
---
|
|
- name: Setup kiosk
|
|
hosts: kiosk
|
|
|
|
vars:
|
|
username: kiosk
|
|
|
|
docker_add_repo: true
|
|
docker_users:
|
|
- "{{ username }}"
|
|
|
|
|
|
roles:
|
|
- role: geerlingguy.docker
|
|
become: true
|
|
|
|
|
|
tasks:
|
|
# - name: Ensure raspi-config is up to date
|
|
# become: true
|
|
# shell: "raspi-config nonint do_update"
|
|
# changed_when: False
|
|
|
|
|
|
|
|
|
|
- name: Set autologin
|
|
become: true
|
|
shell: "raspi-config nonint do_boot_behaviour B2"
|
|
# There is no output from this command, so its difficult to see when the mode has changed
|
|
|
|
- name: Enable overscan
|
|
become: true
|
|
shell: "raspi-config nonint do_overscan 1"
|
|
|
|
- name: Update packages
|
|
become: true
|
|
ansible.builtin.apt:
|
|
upgrade: safe
|
|
update_cache: yes
|
|
|
|
- name: Install desktop packages
|
|
become: true
|
|
ansible.builtin.apt:
|
|
install_recommends: false
|
|
state: present
|
|
pkg:
|
|
- xserver-xorg
|
|
- x11-xserver-utils
|
|
- xinit
|
|
- xdotool
|
|
- openbox
|
|
|
|
- name: Install chromium
|
|
become: true
|
|
ansible.builtin.apt:
|
|
install_recommends: false
|
|
state: present
|
|
name: chromium-browser
|
|
|
|
- name: Install userspace apps
|
|
become: true
|
|
ansible.builtin.apt:
|
|
install_recommends: false
|
|
state: present
|
|
name: jq
|
|
|
|
- name: Configure openbox autostart
|
|
become: true
|
|
ansible.builtin.blockinfile:
|
|
path: /etc/xdg/openbox/autostart
|
|
block: |
|
|
# Read environment from ~kiosk/config.json
|
|
# WEBSITE=$(sed -ne 's/WEBSITE=\(.*\)$/\1/p' /home/kiosksettings)
|
|
WEBSITE=$(jq .website ~/kiosk/config.json | sed -e 's/^"//' -e 's/"$//')
|
|
#
|
|
# Disable screen saver / screen blanking / power management
|
|
xset s off
|
|
xset s noblank
|
|
xset -dpms
|
|
#
|
|
# Allow quitting X server with CTRL-ALT-Backspace
|
|
setxkbmap -option terminate:ctrl_alt_bksp
|
|
# Start commands script
|
|
cd /home/kiosk && ./control.sh &
|
|
#
|
|
# Start chromium in kiosk mode
|
|
sed -i 's/"exited_cleanly":false/"exited_cleanly":true/' ~/.config/chromium/'Local State'
|
|
sed -i 's/"exited_cleanly":false/"exited_cleanly":true/; s/"exit_type":"[^"]\+"/"exit_type":"Normal"/' ~/.config/chromium/Default/Preferences
|
|
chromium-browser --disable-infobars --kiosk ${WEBSITE:=https://bit.ly/shelford_kiosk}
|
|
|
|
- name: Configure openbox-session
|
|
ansible.builtin.blockinfile:
|
|
path: /home/{{ username }}/.xinitrc
|
|
create: true
|
|
line: "exec openbox-session"
|
|
|
|
- name: Start window manager
|
|
ansible.builtin.lineinfile:
|
|
path: /home/{{ username }}/.bash_profile
|
|
create: true
|
|
line: '[[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && startx -- -nocursor'
|
|
|
|
- name: Setup cron job to reload website on a schedule
|
|
ansible.builtin.cron:
|
|
name: "Reload kiosk"
|
|
minute: "0"
|
|
hour: "0,2,4,6,8,10,12,14,16,18,20,22"
|
|
job: "DISPLAY=:0.0 xdotool key ctrl+r"
|
|
|
|
- name: Create kiosk config directory
|
|
ansible.builtin.file:
|
|
path: /home/{{ username }}/kiosk
|
|
state: directory
|
|
mode: '0777'
|
|
|
|
- name: Create named pipe for comms from container
|
|
command:
|
|
cmd: mkfifo -m 0666 /home/{{ username }}/commands
|
|
creates: /home/{{ username }}/commands
|
|
|
|
- name: Create commands script to enable piping commands from containers
|
|
copy:
|
|
dest: /home/{{ username }}/control.sh
|
|
mode: 0755
|
|
owner: "{{ username }}"
|
|
content: |
|
|
#!/bin/sh
|
|
while true
|
|
do
|
|
while read -r cmd; do
|
|
echo Command ${cmd}
|
|
case $cmd in
|
|
"restart")
|
|
sudo reboot
|
|
;;
|
|
*)
|
|
echo "Unknown command '${cmd}'"
|
|
;;
|
|
esac
|
|
done < commands
|
|
done
|
|
|
|
|
|
- name: Start admin console container
|
|
community.docker.docker_container:
|
|
name: website
|
|
image: hub.apptabulous.co.uk/apptabulous/kiosk:latest
|
|
restart_policy: always
|
|
ports:
|
|
- "80:3000"
|
|
volumes:
|
|
- "/home/{{ username }}/kiosk:/app/kiosk"
|
|
- "/home/{{ username }}/commands:/app/commands"
|
|
state: started
|