Название: Как запретить закрытие окон под Astra Linux Отправлено: AlexEx от Апрель 24, 2019, 10:53 На форуме Astra Linux мне не ответили, так что попробую спросить здесь.
Портирую несколько приложений с Windows 7 Qt 5.7 на Astra Linux (пока CE) Qt 5.11. Требуется полностью запретить пользователю закрывать и перемещать некоторые окна (не имеющие X или заголовка), а также запретить завершение приложений. Желательно вообще убрать системное меню и иконки из панели задач. Это ж надо было догадаться дать даже нерутовоному пользователю возможность грохнуть свое приложение из практически пользовательского интерфейса! И это ОС, разрешенная МО РФ! Сейчас под Windows все это делается платформенно зависимым способом. Как я понимаю, всё это надо делать через API fly-wm, а не через X11, или я ошибаюсь? Просьба подсказать, как это реализовать. Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: qate от Апрель 24, 2019, 13:25 необходимо запретить даже killall my_app_ran_by_me ?
что такое делает приложение, что его нельзя прибить ? ) Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: zhbr от Апрель 24, 2019, 14:19 всё это надо делать через API fly-wm, а не через X11, или я ошибаюсь? Просьба подсказать, как это реализовать. может нужно вобще тогда вместо запуска wm, запускать это приложение? Это ж надо было догадаться дать даже нерутовоному пользователю возможность грохнуть свое приложение из практически пользовательского интерфейса! И это ОС, разрешенная МО РФ! странные нападки...Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: AlexEx от Апрель 24, 2019, 15:16 Приложение отображает мнемосхемы технологического процесса. Убив приложение оператор может пропустить много важного и не выполнить вовремя то, что положено. От wm врядли можно избавиться (хотя такая идея и приходила мне в голову, а другая бредовая идея была попробовать OpenGl :-) - но тут я не специалист), так как в перспективе переход на SE версию.
Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: ssoft от Апрель 24, 2019, 15:17 Требуется полностью запретить пользователю закрывать и перемещать некоторые окна (не имеющие X или заголовка), а также запретить завершение приложений. Это можно запретить с помощью перехвата событий QCloseEvent, QMoveEvent и др. Возврат по ним false и/или задание фиксированной геометрии даст желаемый результат. Желательно вообще убрать системное меню и иконки из панели задач. Это ж надо было догадаться дать даже нерутовоному пользователю возможность грохнуть свое приложение из практически пользовательского интерфейса! Это делается через системные настройки. Не отображать окно в системном меню можно, например, задав ему свойство Qt::Tool. Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: AlexEx от Апрель 24, 2019, 15:47 Собственно так сейчас все и сделано - closeevent игнорируется, на move посажен свой обработчик. Засада в том, что moveevent происходит только в начале и конце перемещения окна (и то уже после перемещения), так что окно все-таки перемещается и если не завершать процесс перемещения, окно может быть оставлено где угодно (почти). Qt::Tool и так есть и прекрасно работает под Windows, но вот Астре он пофигу. Ну и самый криминал - возможность посылки SIGKILL. Похоже, надо будет все-таки решать проблему работы без wm.
Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: ssoft от Апрель 24, 2019, 15:59 В Астре, как и любом другом линуксе, много разных оконных менеджеров. У многих из них обширный набор опций для управления окнами. Разные политики могут устанавливаться даже по названию окна. Можете даже свой менеджер написать на базе какого-нибудь opensource.
Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: qate от Апрель 24, 2019, 16:15 Ну и самый криминал - возможность посылки SIGKILL. Так ведь и в венде есть taskkill Можно написать скрипт перезапуска приложения по завершению Там же использую xdotool периодически открывать окно на полный экран ) Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: AlexEx от Апрель 24, 2019, 16:23 В Винде надо еще добраться до taskkill, а Ctrl-Alt-Del (и многое другое) можно ведь и запретить, а тут SIGKILL в системном меню прямо рядом с пунктом закрытия окна.
Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: qate от Апрель 24, 2019, 16:30 Конечно открыть командную строку не всем под силам в венде )
Но такие решения не надежны Для надежности стоит писать сервис, работающий от рута или другого пользователя А обычному юзеру - морду-клиент с перезапуском. При важном сигнале от сервера клиент можно выводить поверх всех окон. Тут конечно придется сильно доработать приложение. Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: Old от Апрель 24, 2019, 16:45 2AlexEx Вы бы рассказали, чего вы хотите достичь в конце концов. Для чего такие ограничения пользователя?
Что будет доступно пользователю (мышь и клавиатура или только мышь)? Если у пользователя будет клавиатура, то любое окно он сможет закрыть через Ctrl-Alt-Esc (эта функция самих иксов) - вместо курсора появиться череп, наводите его на нужное окно и кликаете. Приложение уже ничего с этим не сделает. Эту возможность также нужно как-то отключать. Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: AlexEx от Апрель 25, 2019, 10:55 Попробую объяснить, что и для чего. Есть самописная SCADA система 1999-го года рождения. Технологический процесс неважен. Все в ней работает как надо, что много раз проверено. Вот только весь пользовательский интерфейс рабочих мест операторов сделан под Windows (сначала NT 4.0, потом XP, потом Windows 7). Теперь у нас импортозамещение и в список разрешенных ОС Windows больше не входит (а ведь NT 4.0 когда-то входила), а вот Astra Linux SE входит. И показалось, что она наиболее вменяемая, так что надо портировать. Ошибки оператора могут стоить ну очень дорого. Отсюда и весь наезд.
Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: Old от Апрель 25, 2019, 11:03 Попробую объяснить, что и для чего. Есть самописная SCADA система 1999-го года рождения. Технологический процесс неважен. Все в ней работает как надо, что много раз проверено. Вот только весь пользовательский интерфейс рабочих мест операторов сделан под Windows (сначала NT 4.0, потом XP, потом Windows 7). Теперь у нас импортозамещение и в список разрешенных ОС Windows больше не входит (а ведь NT 4.0 когда-то входила), а вот Astra Linux SE входит. И показалось, что она наиболее вменяемая, так что надо портировать. Ошибки оператора могут стоить ну очень дорого. Отсюда и весь наезд. По моему опыту, такие системы необходимо реализовывать следующим образом: есть ядро системы управления, реализованное как набор демонов (служб), которые и реализуют весь техпроцесс. И есть отдельно графический клиент, который может корректировать работу ядра. Даже если на время графический клиент будет закрыт, то на работе всей системы это никак не отразиться.Ядро должно быть максимально надежным, с возможностью автоматического перезапуска подсистем демонов, а GUI является лишь средством просмотра телеметрии и корректировки параметров ядра. Тут можно ничего не блокировать, закрыл оператор GUI ну и ладно, захочет посмотреть/откорректировать параметры - запустит сам. При таком подходе, становится не важно где запущен графический клиент, на управляющем десктопе или на мобильном планшете. И запущен ли вообще. IMHO, это чисто вендовый подход, когда один бинарник и техпроцессом управляет и GUI отображает, и кино показывает. Когда все разделено, можно из "кубиков" собирать более сложные и надежные системы. Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: AlexEx от Апрель 25, 2019, 11:23 Мы же не на облаке живем, на разработку нового правильного ПО никто денег не даст, тем более что все и так работает. Да и дело не в надежности самого ПО, все строировано и зарезервировано. Дело в том, что при случайном закрытии пользовательского интерфейса оператор может проморгать важное событие. Прокурор-то его потом в архиве найдет :-). Так что возможность ошибки оператора должна быть сведена к минимуму. Речь идет именно об ошибке, целенаправленные действия не рассматриваем.
Кстати, по Ctrl-Alt-Esc ничего не происходит - сейчас проверил. Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: AlexEx от Апрель 25, 2019, 11:27 PS
To Old. Техпроцессом управляют совсем другие вычислительные средства, эти машины АРМ - только GUI. Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: Old от Апрель 25, 2019, 11:30 Дело в том, что при случайном закрытии пользовательского интерфейса оператор может проморгать важное событие. Прокурор-то его потом в архиве найдет :-). Так что возможность ошибки оператора должна быть сведена к минимуму. Тогда просто добавьте диалог с запросом подтверждения, если пользователь пытается закрыть окно (выйти из приложения) и запрашивайте два раза, если он это делает при работающем техпроцессе.Все это делается в обработчике QCloseEvent, в пару строк кода. В документации даже пример такой был. Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: Old от Апрель 25, 2019, 11:33 PS Тогда можно принудительно перезапускать GUI при получении важного сообщения, если он был закрыт. Или сигнализировать об этом, например, открытием отдельного диалога или всплывающим сообщением SystemTray + звуковое оповещение. Тогда оператор сможет сам открывать GUI и разобраться с проблемой.To Old. Техпроцессом управляют совсем другие вычислительные средства, эти машины АРМ - только GUI. Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: AlexEx от Апрель 25, 2019, 11:40 Да CloseEvent и так заблокирован, а перемещение почти тоже - см. выше. А вот соседствующие в меню пункты Закрыть окно и Убить приложение - это жесть. Конечно, последнее с подверждением, но все мы знаем, как на автомате жмется OK.
Звук в свое время тоже был опробован, специфика не позволила использовать. Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: Old от Апрель 25, 2019, 12:02 Да CloseEvent и так заблокирован, а перемещение почти тоже - см. выше. А вот соседствующие в меню пункты Закрыть окно и Убить приложение - это жесть. Конечно, последнее с подверждением, но все мы знаем, как на автомате жмется OK. Ну еще как вариант, можно открывать главное окно в fullscreen (QWidget::showFullScreen), тогда заголовка окна не будет вообще.Звук в свое время тоже был опробован, специфика не позволила использовать. Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: AlexEx от Апрель 25, 2019, 12:15 А заголовка главного окна и так нет, меню присутствует в иконке окна из панели инструментов. Окон много и некоторые должны иметь заголовки. Идея убрать системные заголовки и написать свои тоже была, но поскольку это не решает проблемы меню из панели инструментов, пока отложена.
Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: AlexEx от Апрель 25, 2019, 13:07 Итого, похоже варианта всего два:
1. Повесить демона, перезапускающего UI при его закрытии (самое простое, но не очень красивое). 2. Взять готовый простейший WM и допилить его до нужного состояния (тут могут быть проблемы с сертификацией под SE). Я, честно говоря, рассчитывал, что найдутся люди, поработавшие с библиотеками libflycore, libflyui, может в них что есть. Никакого описания их я пока не нашел :-(. Спасибо за обсуждение. Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: qate от Апрель 25, 2019, 13:21 1. Повесить демона, перезапускающего UI при его закрытии (самое простое, но не очень красивое). не нужен демон, достаточно bash скрипта - просто цикл перезапуска это полезно и при падениях программы я так и делаю Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: AlexEx от Апрель 25, 2019, 13:31 Ну это дело вкуса :-) Мне проще написать программу на C-ях. Да и все, что описано - это лишь вершина айсберга. Надо будет отслеживать много еще чего.
Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: Dimas от Апрель 25, 2019, 18:48 Попробую объяснить, что и для чего. Есть самописная SCADA система 1999-го года рождения. Технологический процесс неважен. Все в ней работает как надо, что много раз проверено. Вот только весь пользовательский интерфейс рабочих мест операторов сделан под Windows (сначала NT 4.0, потом XP, потом Windows 7). Теперь у нас импортозамещение и в список разрешенных ОС Windows больше не входит (а ведь NT 4.0 когда-то входила), а вот Astra Linux SE входит. И показалось, что она наиболее вменяемая, так что надо портировать. Ошибки оператора могут стоить ну очень дорого. Отсюда и весь наезд. Установите wine и запускайте старые исполняемые файлы. Мега-костыль, зато заново не надо переписывать и отлаживать код. Есть товарищи, которые на AstraLinux также запускают боевую программу, только тсс. Они об этом стесняются говорить военным. Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: Igors от Апрель 26, 2019, 08:10 Дело в том, что при случайном закрытии пользовательского интерфейса оператор может проморгать важное событие. Прокурор-то его потом в архиве найдет :-). И отсюда вывод - не позволять закрывать! И начинается "борьба с ОС" - куча хлопот "зато" сомнительный результат. Думается такой подход бесперспективен. В конце-концов оператор может и насвистеть типа "да ничего я не проморгал, это свет рубанули!".Стоит поискать др пути обеспечения (необходимой) надежности. Напр при следующем запуске вываливать окно что, мол, прощелкал, или даже восстанавливаться. Словом, не позволять просто так вернуться к нормальной работе пока проблема не решена. А "держать не пущать" - дело тухлое. Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: vic57 от Апрель 26, 2019, 09:16 Итого, похоже варианта всего два: я делал такие вещи в тайловых WM. попробуйте dwm - самый простой 1. Повесить демона, перезапускающего UI при его закрытии (самое простое, но не очень красивое). 2. Взять готовый простейший WM и допилить его до нужного состояния (тут могут быть проблемы с сертификацией под SE). Я, честно говоря, рассчитывал, что найдутся люди, поработавшие с библиотеками libflycore, libflyui, может в них что есть. Никакого описания их я пока не нашел :-(. Спасибо за обсуждение. Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: qate от Апрель 26, 2019, 11:08 попробуйте dwm - самый простой интересно как к этому отнесутся сами пользователи программы ? ) им будет неудобно, все же привыкли к обычным проведениям окон, мозг вынесут разработчику если только не предполагается использовать комп для одной программы ТС Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: AlexEx от Апрель 26, 2019, 11:19 Все это - не замена существующего ПО, это - новые системы для той же технологии. Про "свет рубанули" - все питается от двух независимых сетей при УПС величиной с гору. А оператор, к сожалению, активно участвует в тех процессе. Так свыше предопределено.
Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: AlexEx от Апрель 26, 2019, 11:21 ЗЫ как всегда
У Астры обнаружился kiosk-mode. Вроде-бы для таких вот случаев. Буду смотреть. Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: vic57 от Апрель 26, 2019, 12:14 попробуйте dwm - самый простой интересно как к этому отнесутся сами пользователи программы ? ) им будет неудобно, все же привыкли к обычным проведениям окон, мозг вынесут разработчику если только не предполагается использовать комп для одной программы ТС Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: kuzulis от Апрель 26, 2019, 12:25 [offtop]
Плюс, еще и резервирование АРМ операторов делают обычно... Если на одном АРМ-е какой-то кирдык со скадой, то на резервном (или одном из резервных АРМ-ов) запускается "виу-виу-виу" чтобы привлечь внимание оператора. Также все события логируются в базу, как все действия оператора, так и прочее... И если в логе видно, что оператор закрыл главное окошко - то он ССЗБ, т.к. никогда в операторы не берут идиотов, все операторы технически грамотные и подкованные (да и расписываются в журнале, о том что ознакомлены с особенностями скады и пр.) и дадут фору любому программисту.. :) Плюс ко всему, в каждой отрасти есть свои очень жесткие требования к СКАДАМ и пр. фишки (алгоритм дейстий и реакции оператора и/или СКАДЫ на то или иное событие)... Если таких требований нет - и программист сам придумывает всякие штучки-дрючки (а вот, запрещу ка я закрытие окошек) - то тут у меня нет слов (а в этой теме именно такая дичь). [/offtop] Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: AlexEx от Апрель 26, 2019, 12:36 Да все так и есть, все пульты и прочие вычислительные средства резервированно-троированные, локальная сеть дублированная. Вот оператор только живой и не может он смотреть на три экрана одновременно. Звук не прижился от слова совсем.
Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: vic57 от Апрель 26, 2019, 17:23 можно перезапускать приложение без потери данных
mainwindow.h Код: #ifndef MAINWINDOW_H Код: #include "mainwindow.h" Код: #include "mainwindow.h" Код
Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: vic57 от Апрель 27, 2019, 13:18 Требуется полностью запретить пользователю закрывать и перемещать некоторые окна (не имеющие X или заголовка), а также запретить завершение приложений. ну вот как вариант - неубираемое, незакрываемое и не перемещаемое окноКод: //respawn.cpp Код останов Код
Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: AlexEx от Апрель 27, 2019, 13:40 Я, все-таки, кое-чего нашел: во-первых - настройки, при которых окна не попадают в панель инструментов (соответственно, нет и меню), может, есть и еще чего-нибудь хорошее; во-вторых - kiosk-mode для организации разных терминалов, позволяет запускать приложение вообще без рабочего стола либо организовывать песочницу. Не устраивает ведь не весь WM, а только DE.
У перезапуска есть побочный эффект - если приложение падает по сбою железа или от программной ошибки, может получиться циклический перезапуск. Тут надо думать. Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: vic57 от Апрель 28, 2019, 11:00 Код: #include <QApplication> Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: AlexEx от Апрель 28, 2019, 19:33 OpenBox тоже рассматривался. Здесь, скорее всего будут проблемы с сертификацией под версию Special Edition, надо выяснять. /offtop Ну и кой-какой опыт я тоже накопил, заничвясь разработкой этого сорта ПО с 1983 г. :-) offtop/
Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: qate от Апрель 29, 2019, 08:57 У перезапуска есть побочный эффект - если приложение падает по сбою железа или от программной ошибки, может получиться циклический перезапуск. Тут надо думать. делать перезапуск при сбое ограниченное число раз, например 5 и всегда выжидать паузу между перезапусками 5 сек Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: qate от Апрель 29, 2019, 08:59 останов Код
от этого тоже можно защититься, если это не SIGKILL Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: vic57 от Апрель 29, 2019, 10:44 OpenBox тоже рассматривался. Здесь, скорее всего будут проблемы с сертификацией под версию Special Edition, надо выяснять. /offtop Ну и кой-какой опыт я тоже накопил, заничвясь разработкой этого сорта ПО с 1983 г. :-) offtop/ вангую вы с линухами мало знакомы. у астры есть свой сертифицированный репозиторий, можете из него скачать все что нужно. по факту - тот же дебиан тока рабочий стол перепиленый посмотрел на LiveCD с mirror.yandex.ru - опенбокс там есть по дефолту, можно выбрать при входе в выборе типа сессии, при подключении репы с яндекса ставится qtcreator Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: Igors от Апрель 29, 2019, 13:29 никогда в операторы не берут идиотов, все операторы технически грамотные и подкованные (да и расписываются в журнале, о том что ознакомлены с особенностями скады и пр.) и дадут фору любому программисту.. :) "Портовому мальчонке" - возможно и дадут :), а за всех программистов расписываться не надо. Но в целом офф весьма здравый - такие проблемы не решаются дизайблом кнопок. По меньшей мере нужно фиксировать факт ошибки, и неплохо бы уточнить - а что это? Что значит невнятное "оператор может проморгать"? Закрыл приложение (или оно само закрылось по объективным причинам), и важный запрос не был принят и ...утерян, так что ли? Значит недопустимо терять, нужно сохранять запрос и факт "неответа" и предъявлять это при след запуске. Видимо это кажется слишком банальным, нужно нагородить что-нибудь "эдакое" :) Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: AlexEx от Апрель 29, 2019, 13:31 Не спорю, с Linuxaми мало знаком. Последний раз имел дело с Mandriva 2007. Ну а общее направление действий в общем-то прояснилось.
Название: Re: Как запретить закрытие окон под Astra Linux Отправлено: Fregloin от Май 07, 2019, 15:40 Только собирался сказать про kiosk-mode. Уже один раз сталкивался - то что вам нужно. По поводу падения софта, напишите демон, который остлеживает жизнеспособность вашего GUI приложения, и по таймауту или вачдогу перезапускает его.
|