в продолжение https://terminalko.blogspot.com/2019/04/blog-post.html
надо : mpv xorg xdotool i3
топовые команды
поворот экрана | export DISPLAY=':0.0' && xrandr -o left & |
вернуть как было | export DISPLAY=':0.0' && xrandr -o normal & |
переключение на рабочее место 1 | export DISPLAY=':0.0' && exec i3-msg 'workspace 1' & |
переключение на рабочее место 1 альтернативный способ | export DISPLAY=':0.0' && xdotool key "Super_L+1" |
переключение на рабочее место 2 | export DISPLAY=':0.0' && exec i3-msg 'workspace 2' & |
переключение на рабочее место 2 альтернативный способ | export DISPLAY=':0.0' && xdotool key "Super_L+2" |
запуск произвольного потока | export DISPLAY=':0.0' && mpv -border=no rtsp://admin:admin@10.190.249.9/live/main & |
узнать текущее рабочее место | i3-msg -t get_workspaces | jq '.[] | select(.focused==true).name' | cut -d"\"" -f2 |
в файле
/home/filalex/.bash_profile
прописываем
[[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && exec startx
в файле
/etc/systemd/system/getty.target.wants/getty@tty1.service
меняем строку
ExecStart=-/sbin/agetty -o '-p -- \\u' --noclear %I $TERM
на
ExecStart=-/sbin/agetty -a filalex %I $TERM
в конце файла
/home/filalex/.config/i3/config
прописываем либо скрипт либо команду
exec /home/filalex/load_layout.sh
exec mpv -border=no rtsp://admin:admin@10.190.249.9/live/main &
в кронтаб записываем
1-59/2 * * * * filalex export DISPLAY=':0.0' && exec i3-msg 'workspace 1' & 2-58/2 * * * * filalex export DISPLAY=':0.0' && exec i3-msg 'workspace 2' &
i3-save-tree --workspace 1 > /home/filalex/workspace-1.json
tail -n +2 /home/filalex/workspace-1.json | fgrep -v '// splitv' | sed 's|//||g' > /home/filalex/workspace1.json
i3-msg "workspace 1; append_layout /home/filalex/workspace1.json"
но это только восстанавливает мозайку которая была сохранена, поэтому надо еще запустить в этой мазайке приложухи проще всего это сделать скриптом , а его засунуть в автозапуск
#!/bin/bash # Во-первых, мы добавим сохраненный макет рабочей области N в рабочую область M i3-msg "workspace 1; append_layout /home/filalex/workspace1.json" # И, наконец, мы заполним контейнеры программами (mpv -border=no rtsp://admin:admin@10.190.253.88/live/main &) (mpv -border=no rtsp://admin:admin@10.190.252.101/live/main &) (mpv -border=no rtsp://admin:admin@10.190.254.94/live/main &)
x11vnc -display :0 -auth /tmp/serverauth.*
осталось захардкодить проверку потоков тисипидампом и перезапуск в случае падения
--------------------------------------------------------
google-chrome-stable --kiosk http://127.0.0.1/ --new-window --start-maximized --incognito --autoplay-policy=no-user-gesture-required --disable-features=PreloadMediaEngagementData,AutoplayIgnoreWebAudio,MediaEngagementBypassAutoplayPolicies &
так же можно юзать firefox (в сервии 71 они научились работать в режиме киоск и не нужны вякие необновляемые плагины) но эта сволочь будет просить обновлений пока не нагуглил как их отключить
как вариант дождаться ESR версии но на данный момент она 68 а следующая будет 78 - June 30, 2020 хотя в ней тоже могут быть камни
firefox --kiosk http://127.0.0.1 -private
- автологин пользователя
требуются пакеты php lighttpd xdotool (xdotool можно заменить на разширение для файрфокса типа R-kiosk )
в автоматически запускаемые приложения добавляем 2 пункта
- firefox
- и скрипт который на окне огнелиса жмакнет F11
#!/bin/sh sleep 20 export DISPLAY=':0.0' WID=`xdotool search --name Mozilla | head -1` xdotool windowactivate $WID xdotool key F11
firefox настраиваем на страничку http://127.0.0.1
на локалхосте ставим след кусочек html
<meta http-equiv="refresh" content="36000"> <body bgcolor="black"> <TABLE border="0" style="width:100%; height:100%;" bgcolor="black"> <TR> <TD><iframe style="width:100%; height:100%;" src="http://193.203.61.11:8080/Apelsin/embed.html?realtime=true"></iframe>></TD> <TD><iframe style="width:100%; height:100%;" src="http://193.203.61.11:8080/opp_router/embed.html?realtime=true"></iframe>></TD> </TR> <TR> <TD><iframe style="width:100%; height:100%;" src="http://193.203.61.11:8080/opp_agents/embed.html?realtime=true"></iframe>></TD> <TD><iframe style="width:100%; height:100%;" src="http://193.203.61.11:8080/senko/embed.html?realtime=true"></iframe>></TD> </TR> </TABLE> </body>
в /etc/lighttpd/lighttpd.conf дописываем строки
$HTTP["remoteip"] !~ "127.0.0.1|37.235.235.0|37.235.143.99" { url.access-deny = ("") }
требуются пакеты xdotool mplayer2
в кроне
*/1 * * * * root /home/filalex/strdumper.sh */1 * * * * filalex /home/filalex/4mpl.sh
#!/bin/bash for i in {1..4} do dumphost=`grep str$i /home/filalex/4mpl.sh | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}"` timeout 5 tcpdump -i enp1s0 -n -q host $dumphost > /home/filalex/tdump$i cp /home/filalex/tdump$i /home/filalex/dump$i` done
#!/bin/bash # тут указываем какие стримы будем вещать scriptname=4mpl.sh str1=rtmp://10.190.255.215:1935/livemain str2=rtmp://10.190.255.148:1935/livemain str3=rtmp://10.80.1.132:1935/livemain str4=rtmp://10.190.255.147:1935/livemain # глядим что за экран у нас, вдруг сменили и пригодиться в положениях плеера export DISPLAY=':0.0' xwin=`xdotool getdisplaygeometry | awk {'print $1'}` ywin=`xdotool getdisplaygeometry | awk {'print $2'}` # прячим мышку? помоему не работает xdotool mousemove "$xwin $ywin" # это статусбар убунту, мешается по умолчанию на 24 пикселя, сука Barsize=24 # тут мы делем полученый размер экрана на 4 равных части за вычетом бара let "wsizex=$xwin / 2" let "wsizey=$ywin / 2 - ($Barsize / 2)" wsize="$wsizex""x""$wsizey" let "wsizeyY=$wsizey + $Barsize " # водим переменные позиций окон gpos1="+0+$Barsize" gpos2="+$wsizex+$Barsize" gpos3="+$wsizex+$wsizeyY" gpos4="+0+$wsizeyY" # гавнякаем переменными в syslog - тупо для дебага, можно удалить logger "$scriptname str1=$str1" logger "$scriptname str2=$str2" logger "$scriptname str3=$str3" logger "$scriptname str4=$str4" logger "$scriptname xwin=$xwin" logger "$scriptname ywin=$ywin" logger "$scriptname wsize=$wsize" logger "$scriptname gpos1=$gpos1" logger "$scriptname gpos2=$gpos2" logger "$scriptname gpos3=$gpos3" logger "$scriptname gpos4=$gpos4" # из соседнего скрипта тисипидампим ip переменных str и складываем # в файл, если в файле меньше 2 х строк - потока нет, перезапускаемся a=1 b=`cat /home/filalex/dump1 | wc -l ` c=`cat /home/filalex/dump2 | wc -l ` d=`cat /home/filalex/dump3 | wc -l ` e=`cat /home/filalex/dump4 | wc -l ` # тут я не понял как работет $переменная$а_тут_вторая_которая_подставляется_первой поэтому говнокод if [ "$b" -gt "$a" ] then logger "$scriptname поток $str1 в норме, что то прилетелоработаем дальше " else logger "$scriptname поток $str1 упал, перезапускаем плеер" mplayer -noborder -geometry "$wsize"$gpos1 $str1 & fi if [ "$c" -gt "$a" ] then logger "$scriptname поток $str2 в норме, что то прилетелоработаем дальше " else logger "$scriptname поток $str2 упал, перезапускаем плеер" mplayer -noborder -geometry "$wsize"$gpos2 $str2 & fi if [ "$d" -gt "$a" ] then logger "$scriptname поток $str3 в норме, что то прилетелоработаем дальше " else logger "$scriptname поток $str3 упал, перезапускаем плеер" mplayer -noborder -geometry "$wsize"$gpos3 $str3 & fi if [ "$e" -gt "$a" ] then logger "$scriptname поток $str4 в норме, что то прилетелоработаем дальше " else logger "$scriptname поток $str4 упал, перезапускаем плеер" mplayer -noborder -geometry "$wsize"$gpos4 $str4 & fi