Система трансляции экранов компьютеров учеников на доску
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
set -e
|
|
|
|
set -f
|
|
|
|
set -u
|
|
|
|
set -o pipefail
|
|
|
|
|
|
|
|
_zenity(){
|
|
|
|
zenity --width=250 --title="Doskast" "$@"
|
|
|
|
}
|
|
|
|
|
|
|
|
readonly config="/etc/doskastrc"
|
|
|
|
|
|
|
|
if ! . /etc/doskastrc ; then
|
|
|
|
# || : to stabilize return code if clicking "Cancel" in zenity
|
|
|
|
_zenity --error --text="Нет файла с настройками Doskast, запустите программу настройки!" || :
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ -z "${board:-}" ]; then
|
|
|
|
_zenity --error --text="Неправильный файл настроек Doskast, запустите программу настройки!" || :
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
IFS='x' read -a area < <(xdpyinfo | grep -oP 'dimensions:\s+\K\S+')
|
|
|
|
width="${area[0]}"
|
|
|
|
height="${area[1]}"
|
|
|
|
if [ -z "$width" ] || [ -z "$height" ]; then
|
|
|
|
_zenity --error --text="Ошибка получения геометрии экрана." || :
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
# На серверной стороне может быть ограничено кол-во одновременных соединений с одного IP-адреса
|
|
|
|
# для защиты от DDoS-атак. Имеет смысл установить ограничение в 1 запрос. Однако, если curl
|
|
|
|
# или серверный обработчик по каким-то причинам зависнут, то соединение будет открыто,
|
|
|
|
# способа его прибить кнопкой не будет,а новые соединения сервер не примет, пока это не будет закрыто.
|
|
|
|
if ! timeout 5 curl --fail "http://${board}/cgi-bin/doskast-trigger-connect.cgi?width=${width}&height=${height}"; then
|
|
|
|
_zenity --error --text="Ошибка отправки запроса на доску." || :
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
_zenity --info --text="На доску отправлен запрос на трансляцию экрана этого компьютера." || :
|