URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 97383
[ Назад ]

Исходное сообщение
"Xserver при обрыве соединения с клиентом требуется закрыть окно"

Отправлено Михаил , 15-Мрт-19 23:16 
Здравствуйте, прошу прощения, я в данной области чайник, честно, и так и сяк пытался формулировать запросы, но ссылки ведут в базовые темы про xhost+ которые нужного вопроса не поднимают.

И так, имеется АСУТП(всё на линуксах), есть низовая система(вернее несколько), есть пульт управления комп+клава+монитор. Низовые системы выводят свои окна на этот Xserver.
Проще говоря за Xserver "сидит/смотрит" оператор, на нём вызывается xhost + 192... нужные клиенты(вопросы безопасности не рассматриваем, все кабельные связи контролируются).

Система уже сделана, так как есть, и всё работает, есть одно неприятное "НО". В случае "нештатного" обрыва соединения с клиентом (например вырвать Ethernet кабель), то на рабочем месте оператора окно просто перестаёт меняться, это в ряде случаев вводит в заблуждение(т.к. сложно понять актуальные данные выводятся или по факту всё давно не работает а картинка просто зависла).

Т.е. требуется быстро(желательно в течение секунды-двух) Убирать или закрашивать окна, которые формировались станцией, с которой потеряна(или временно прервана) связь.

Подскажите пожалуйста, наверняка есть какое-то подобие keepalive для такой ситуации.

Метод пинговать низовые системы и при отсутствии связи давать "xhost - адрес системы" и возвращать при возобновлении связи - работает(во всяком случае если отрывать кабели), но, думаю, что есть нормальное решение проблемы с контролем наличия данных именно по X, тем более что там постоянно сыпется много пакетов.

И да, я в этом чайник, указывайте пожалуйста подробно где именно в настройках каких конфигов что указывать. В man для xserver написано про ключ -to (sets default connection timeout in seconds.), но где его можно попробовать установить я понять не могу :-(


Содержание

Сообщения в этом обсуждении
"Xserver при обрыве соединения с клиентом требуется закрыть окно"
Отправлено pavel_simple , 17-Мрт-19 14:03 
>[оверквотинг удален]
> Подскажите пожалуйста, наверняка есть какое-то подобие keepalive для такой ситуации.
> Метод пинговать низовые системы и при отсутствии связи давать "xhost - адрес
> системы" и возвращать при возобновлении связи - работает(во всяком случае если
> отрывать кабели), но, думаю, что есть нормальное решение проблемы с контролем
> наличия данных именно по X, тем более что там постоянно сыпется
> много пакетов.
> И да, я в этом чайник, указывайте пожалуйста подробно где именно в
> настройках каких конфигов что указывать. В man для xserver написано про
> ключ -to (sets default connection timeout in seconds.), но где его
> можно попробовать установить я понять не могу :-(

учитывая то, что используется честый X без проброса через ssh то нужно тюнить tcp стэк linux

начать лучше от сюда

net.ipv4.tcp_keepalive_intvl = 75
net.ipv4.tcp_keepalive_probes = 9
net.ipv4.tcp_keepalive_time = 7200

этj дефолт на моей машине и первое нужно сильно уменьшать до секунды, а второе до 2 и далее тестить и крутить


"Xserver при обрыве соединения с клиентом требуется закрыть окно"
Отправлено Михаил , 17-Мрт-19 18:13 

>  нужно тюнить tcp стэк linux

Про тсп, третья цифра отвечает за начало проверки соединения на разрыв, и если про неё забыть, то "кипаливиться" соединение начнёт только через два часа (разумеется если программа не переопределила эти настройки для своего сокета).

Только эти настройки не помогают, у меня обмен идёт по UDP(tcpdump показывает), так что контроль разрыва соединения не на стороне OS, а дело xservera.

Я хочу узнать есть ли у самого xserver контроль разрыва соединений, и где именно он настраивается.


"Xserver при обрыве соединения с клиентом требуется закрыть окно"
Отправлено pavel_simple , 18-Мрт-19 15:14 
>>  нужно тюнить tcp стэк linux
> Про тсп, третья цифра отвечает за начало проверки соединения на разрыв, и
> если про неё забыть, то "кипаливиться" соединение начнёт только через два
> часа (разумеется если программа не переопределила эти настройки для своего сокета).
> Только эти настройки не помогают, у меня обмен идёт по UDP(tcpdump показывает),
> так что контроль разрыва соединения не на стороне OS, а дело
> xservera.
> Я хочу узнать есть ли у самого xserver контроль разрыва соединений, и
> где именно он настраивается.

ну значит вы не полностью описываете вашу среду, и нужно -listen tcp, потому-что X'ы умеют работать через tcp (возможно придётся через МСЭ прикрыть udp)
а про третий параметр это вы верно озвучили и да, совершенно верно, это будет действовать если приложение не выставляет сокет опции самостоятельно. Если ваши иксы выставляют опции, то возможно придётся накорябать враппер на setsockopt через ld_preload или использовать для этого случая socat в виде
socat -d -d TCP-LISTEN:6000,fork,bind=myexternalip UNIX-CONNECT:/tmp/.X11-unix/X0

socat позволяет выставлять опции tcp из параметров ком. строки

ну, и если-уж дело дошло до врапперов, можно написать враппер который бы робил на udp и контролировал обмен, но там будет много всего весёлого

третий вариант, запускать придожения на машинах локально, например через tightvncserver/xvfb+x11vnc и экпортировать их через vnc или другой протокол передачи картинки/эвентов



"Xserver при обрыве соединения с клиентом требуется закрыть окно"
Отправлено Михаил , 18-Мрт-19 16:44 
Всётаки это у меня косоглазие, сидят иксы на тсп 6000, но дефолтные настройки не помогают, значит они их переопределяют.
Не всегда можно снести железную дорогу и проложить трубу. Менять принцип связи с клиентами нельзя.

Иксы старая штука, ещё модемы помнит, должно быть решение проще. В крайнем случае могу xhost ом отрубать клиентов с кем пинг пропал.


"Xserver при обрыве соединения с клиентом требуется закрыть окно"
Отправлено pavel_simple , 18-Мрт-19 18:31 
> Всётаки это у меня косоглазие, сидят иксы на тсп 6000, но дефолтные
> настройки не помогают, значит они их переопределяют.
> Не всегда можно снести железную дорогу и проложить трубу. Менять принцип связи
> с клиентами нельзя.
> Иксы старая штука, ещё модемы помнит, должно быть решение проще. В крайнем
> случае могу xhost ом отрубать клиентов с кем пинг пропал.

те иксы которые помнят мопеды, а точнее ПО для иксов уже давно почило, сейчас тулкиты отдают иксам битмапы, включая текст, поэтому от исков в современных приложениях толку ноль целых xер десятых

значит socat с опциями отпадает.остаётся LD_PRELOAD и контроль програмный над опциями сокета
начать можно от сюда
https://github.com/yongboy/bindp


"Xserver при обрыве соединения с клиентом требуется закрыть окно"
Отправлено pavel_simple , 18-Мрт-19 18:34 
но я бы stace'ом/ltrace'ом убедился что иксы выставляют опции, чёт сомневаюсь, ну, на крайняк, можно и исходники поправить малёнько, компилячить только долго, иксы тот ещё мегакомбайн