summaryrefslogtreecommitdiffstats
path: root/core/modules/kiosk-chromium/data/opt/openslx/scripts/kiosk-launch.d/00-chromium
blob: 91127373366e1b0a475a337d522c1422e24de133 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#!/bin/bash -- sourced
# prepares and run chromium as kiosk browser

command -v chromium-browser || return 0

# clear state of previous sessions
if [ "$(whoami)" = "demo" ]; then
	rm -rf -- "$HOME/.config/chromium"
	mkdir -p "$HOME/.config/chromium/Default"
fi

# Helper to decode URL-encoded strings
# e.g. urldecode http%3A%2F%2Ffoobar.com -> http://foobar.com
urldecode() {
	: "${*//+/ }"; echo -e "${_//%/\\x}"
}

# Helper to json'ize bookmarks given as arguments in the form:
#    <name>,<url>  ->  e.g. Google,https://www.google.com
json_bookmarks() {
	local cur=0
	local name url
	while [ $# -ne 0 ]; do
		name="${1%%,*}"
		url="$(urldecode ${1#*,})"
		jq --null-input --join-output --compact-output --arg id "$(( cur++ ))" --arg name "$name" --arg url "$url" \
			'{"id": $id, "type": "url", "name": $name, "url": $url}'
		shift
		[ $# -ne 0 ] && printf ","
	done
}

# Pass SLX_BROWSER_BOOKMARKS without quotes for splitting into arguments
cat > "$HOME/.config/chromium/Default/Bookmarks" <<EOF
{
	"roots": {
		"bookmark_bar": {
		"children": [ $(json_bookmarks $SLX_BROWSER_BOOKMARKS) ],
			"id": "1",
			"name": "Lesezeichenleiste",
			"type": "folder"
		},
		"other": {
			"children": [  ],
			"id": "2",
			"name": "Weitere Lesezeichen",
			"type": "folder"
		},
		"synced": {
			"children": [  ],
			"id": "3",
			"name": "Mobile Lesezeichen",
			"type": "folder"
		}
	},
	"version": 1
}
EOF

# default chromium arguments
chromium_args=("--noerrdialogs" "--disable-translate" "--disable-new-avatar-menu" "--disable-infobars" "--test-type" "--fast" "--fast-start")

# simulate a future build date to remove those update notification
# TODO properly disable auto update feature when chromium supports it
chromium_args+=("--simulate-outdated-no-au=\"Tue, 31 Dec 2099 23:59:59 GMT\"")

# default to maximized on startup
chromium_args+=("--start-maximized")

if [ -z "$SLX_BROWSER_INTERACTIVE" ]; then
	if [ -n "${SLX_AUTOLOGIN%OFF}" ]; then
		# Autologin active, go full fullscreen
		chromium_args+=("--kiosk")
	fi

	# swallow keyboard shortcuts of chromium
	cat <<- EOF > "$HOME/.xbindkeysrc"
	"true"
		Control+d
	"true"
		Control+t
	"true"
		Control+s
	"true"
		Control+n
	"true"
		Control+j
	"true"
		Control+p
	"true"
		Control+h
	"true"
		Control+Shift+o
	EOF
	# xbinkeys requires a daemon, run it
	xbindkeys_autostart &

fi

if [ -n "$SLX_BROWSER_RELOAD_SECS" ]; then
	(
	wid=
	wpid=
	while true; do
		if [ -z "$wid" ]; then
			wid="$(xdotool search --onlyvisible --class browser)"
			[ -z "$wid" ] && sleep 1 && continue
			readonly wid
		fi
		if [ -z "$wpid" ]; then
			wpid="$(xprop -id "$wid" | awk -F= '$1 ~ /_NET_WM_PID\(CARDINAL\)/ {print $2}' | tr -d ' ')"
			if [ -z "$wpid" ]; then
				# logs to ~/.xsession-errors
				echo "Failed to get the pid of chromium-browser via xprop..."
				exit 1
			fi
			readonly wpid
		fi
		if [ ! -d "/proc/$wpid" ]; then
			echo "Process with PID $wpid stopped, exiting auto-reload loop."
			exit 0
		fi
		current_idle="$(idle-daemon --send 'get :0' | grep -oP '(?<=idleSeconds=)[0-9]+')"
		if [ "$current_idle " -ge "$SLX_BROWSER_RELOAD_SECS" ]; then
			xdotool windowactivate "$wid"
			xdotool key Alt+Home
			continue
		fi
		sleep "$(( SLX_BROWSER_RELOAD_SECS - current_idle ))"
	done
	) &
fi

if [ -n "$SLX_BROWSER_INSECURE" ]; then
	chromium_args+=("--allow-running-insecure-content" "--ignore-certificate-errors")
fi

# finally exec to chromium
exec chromium-browser "${chromium_args[@]}"