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
140
|
#!/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="$( urldecode "${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" ] && [ "$SLX_BROWSER_RELOAD_SECS" -gt 0 ]; 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
sleep 10
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[@]}"
|