#!/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="На доску отправлен запрос на трансляцию экрана этого компьютера." || :