-
-
Save eslindsey/70bbc0080e335b38836fab09d19686d0 to your computer and use it in GitHub Desktop.
#!/bin/bash | |
# USAGE | |
# span.sh command [arguments] | |
# | |
# DESCRIPTION | |
# Executes command, waits for a new window to appear, then stretches that window across the entire screen area. | |
# | |
# REQUIREMENTS | |
# wmctrl - for finding and controlling X windows | |
# xrandr - for detecting the size of the screens | |
# bc - for timing how long it takes a new window to appear | |
# | |
# EXAMPLES | |
# span.sh chromium-browser --kiosk http://lorempixel.com/1280/720 | |
# span.sh chromium-browser --start-fullscreen http://lorempixel.com/1280/720 | |
# Check to make sure we have a command to execute | |
if [ $# -lt 1 ]; then | |
echo "Usage: $0 command [arguments]" | |
echo "Executes command, waits for a new window to appear, then stretches that window across the entire screen area." | |
exit 1 | |
fi | |
# Allocate some temporary files | |
WF1=`tempfile` | |
WF2=`tempfile` | |
WF3=`tempfile` | |
# Obtain initial list of windows, and execute command | |
wmctrl -l >$WF1 | |
echo "$@" | |
"$@" & | |
# Wait for a new window (time out after 10 seconds) | |
echo "Waiting for a new window..." | |
i=0 | |
while [ $i -le 40 ] | |
do | |
wmctrl -l >$WF2 | |
grep -Fxvf "$WF1" "$WF2" >$WF3 | |
if [ $? -eq 0 ]; then break; fi | |
sleep 0.25 | |
i=$(( $i + 1 )) | |
done | |
rm "$WF1" | |
rm "$WF2" | |
if [ $i -gt 40 ]; then | |
rm "$WF3" | |
echo "New window took longer than 10 seconds, aborting." | |
exit 2 | |
fi | |
# Extract the Window ID of the new window | |
WID=`cut -d' ' -f 1 "$WF3"` | |
TIME=$(bc <<<"scale=2; $i / 4") | |
echo "Found new window ID $WID after $TIME seconds" | |
rm "$WF3" | |
# Obtain dimensions of the screen | |
echo "Detecting screen dimensions..." | |
SIZE=`xrandr | head -1 | grep -Eo 'current [0-9]+ x [0-9]+'` | |
EC=$? | |
if [ $EC -ne 0 ]; then | |
echo "Problem detecting screen dimensions (exit code $EC)" | |
exit 3 | |
fi | |
WIDTH=`echo $SIZE | cut -d' ' -f 2 -` | |
HEIGHT=`echo $SIZE | cut -d' ' -f 4 -` | |
echo "Detected screen dimensions ${WIDTH}x${HEIGHT}" | |
# Reposition the window | |
echo "Repositioning window..." | |
wmctrl -ir $WID -b remove,fullscreen | |
wmctrl -ir $WID -b remove,maximized_vert,maximized_horz | |
wmctrl -ir $WID -e 0,0,0,$WIDTH,$HEIGHT |
I'm trying to get it to work by running the following command in the autostart scipt on a DietPi:
span.sh chromium --app=https://xxx.yy
But the window will not maximize. When manual opening a terminal and write span.sh chromium --app=https://xxx.yy, everything works fine. What could be wrong?
Sounds like a user environment issue. Maybe try sudo -u pi span.sh chromium --app=https://xxx.yy/
to run the command as the user pi in the autostart script?
My "research" has let me to think it might be a problem that the when running the script in Autostart there cannot run two foreground processes at the same time. Do you know if it is possible to run the script another way after the Desktop has loaded?
I'm not sure why, but I ended up not using this script when trying to accomplish the window spanning. Instead, I used an .xinitrc with the following content:
#!/usr/bin/env sh
xrandr --output HDMI-1 --rotate left
xrandr --output HDMI-2 --rotate left --right-of HDMI-1
xset -dpms
xset s off
xset s noblank
unclutter &
chromium-browser http://localhost:3000 \
--window-size=1600,1280 \
--window-position=0,0 \
--start-fullscreen \
--kiosk \
--incognito \
--noerrdialogs \
--disable-translate \
--no-first-run \
--fast \
--fast-start \
--disable-infobars \
--disable-features=TranslateUI \
--disk-cache-dir=/dev/null \
--overscroll-history-navigation=0 \
--disable-pinch
and then including startx
in my .bash_profile. You'll probably need to install unclutter.
I had the same problem, but I found this "toggle-decorations" command-line tool that removes the top info bar: https://gist.github.com/cat-in-136/96ee8e96e81e0cc763d085ed697fe193
toggle-decorations $(wmctrl -lx | grep -E "Chromium" | grep -oE "0x[0-9a-z]{8}")
Chromium is now kiosk-like again.