В классическом терминале xterm имеется специальная опция -into. Она позволяет "вставить" терминал в окно, идентификатор которого известен. Это свойство XTerm используется для быстрого добавления терминала в ПО, например если программа написана на Python с использованием библиотеки Tkinter.
Итак, интеграция окна происходит через давно существующую опцию -into терминала xterm. Программа на Tkinter создает окно, выясняет X-идентификатор этого окна, и вставляет в него терминал xterm путем запуска команды:
xterm -into <id_окна> ... прочие опции ...
Однако, в обновлениях Astra Linux 1.6 старше 12 Update перестал работать текстовый ввод в xterm. То есть, отключилась возможность писать команды в интегрированном xterm, ввод просто не работает.
В файле /var/log/fly-dm/Xorg.0.log обнаруживаются следующие ошибки:
[ 28822.592] XPARSEC: keyloger /usr/bin/xterm(pid=23872) detected by receive event from other owned and-or mac level window (/usr/bin/python3.5,pid=23863)
[ 28822.593] XPARSEC: keyloger /usr/bin/xterm(pid=23872) detected by receive event from other owned and-or mac level window (/usr/bin/python3.5,pid=23863)
То есть, ввод блокирует обновленная подсистема безопасности PARSEC. Она думает, что клавиатурный ввод утекает в другое окно. Техподдержка говорит так: "Логика работы функции блокировки следующая: приложение получает клавиатурные нажатия, выполненные оператором в окнах, созданных не этим приложением, поэтому ввод запрещен".
Решение данной проблемы достаточно простое. Необходимо в файл /etc/X11/trusted добавить строку:
/usr/bin/xterm(KBD_R)
Чтобы это сделать, можно от суперпользователя выполнить команду:
echo "/usr/bin/xterm(KBD_R)" >> /etc/X11/trusted
После выполнения данной команды ввод в GUI интерфейсе заработает. Перегружать компьютер или рабочий стол нет необходимости. Достаточно просто перезапустить само GUI-приложение, в котором используется XTerm-терминал.
Значения ролей, устанавливаемых в файле настройки доверенных программ /etc/X11/trusted, следующие:
Роль |
Значение |
PROP_R |
Работать со свойствами других окон |
CLIPB_R |
Работать с буфером обмена (для менеджеров буфера обмена) |
MAC_R |
Подключаться с иной меткой (выше), чем метка сессии |
HOST_R |
Управлять механизмом Host Access Control |
KBD_R |
Оперировать с некоторыми событиями ввода (для виртуальных клавиатур) |
SNAP_R |
Делать скриншоты (в т. ч. VNC-серверу, композитным менеджерам и т. п.) |
NESTED_R |
Для пометки вложенных Х-серверов (Xephyr, Xnest и т. п.) |
REPARENT_R |
Менять окна родительских окон (для менеджеров окон) |
WM_R |
Для менеджеров окон, комбинация PROP_R, SNAP_R, REPARENT_R, KBD_R |
ALL_R |
Комбинация всех ролей |