Использование альтернативного механизма сброса сессий

Агент УВ поддерживает альтернативный механизм сброса сессий через использование внешнего исполняемого файла.

Для использования механизма нужно:

  • создать исполняемый файл, который должен реализовать механизм сброса сессий, например, /etc/termidesk/script.sh. Содержимое исполняемого файла приведено ниже для примера;
  • задать исполняемому файлу флаг выполнения:
sudo chmod +x /etc/termidesk/script.sh
BASH
  • установить переменную LIBVIRT_PASSWORD_SCRIPT, определив ее в конфигурационном файле /etc/termidesk/termidesk-vmsd.conf. Переменная должна содержать путь к исполняемому файлу:
LIBVIRT_PASSWORD_SCRIPT=/etc/termidesk/script.sh
BASH

Если файла /etc/termidesk/termidesk-vmsd.conf нет, необходимо создать его.

Пример содержимого исполняемого файла для сброса сессий:

#!/bin/sh
#linux-cli$ /path/to/script --protocol=spice --password=no_password --connected=disconnect sun-123
# где
#--protocol возможные варианты протокола [spice|vnc]
#--password пароль подключения
#--connected действия [ keep | disconnect | fail ]
VM_PROTOCOL=""
VM_PASSWORD=""
VM_CONNECTED=""
VM_ID=""
if [ -z "${1}" ]; then
    echo "Не заданы параметры"
fi

while [ -n "${1}" ]; do
    case "$(echo "${1}" | cut -d'=' -f1)" in
        --protocol)
            VM_PROTOCOL="$(echo "${1}" | cut -d'=' -f2)"
            ;;
        --connected)
            VM_CONNECTED="$(echo "${1}" | cut -d'=' -f2)"
            ;;
        --password)
            VM_PASSWORD="$(echo "${1}" | cut -d'=' -f2)"
            ;;
        *)
            [ "$(echo "${1}" | grep -i "one-")" ] && VM_ID="${1}"
            ;;
    esac
    shift
done

if [ -n "$(echo "$VM_CONNECTED" | grep -i "disconnect")" ]; then
    IP_PORT=$(ps ax| grep -i "guest=${VM_ID}[^0-9]" | grep -v grep | sed -E -e "s/.*[[:space:]]+\-${VM_PROTOCOL}[[:space:]]+//" | cut -d' ' -f1 | sed "s/port=//" | cut -d',' -f1)
    echo "VM SPICE port: $IP_PORT"
    if [ "$IP_PORT" ]; then
        ss --kill -t src :${IP_PORT}
    fi
fi
BASH