Russian Qt Forum
Март 29, 2024, 00:04 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: Как запретить закрытие окон под Astra Linux  (Прочитано 24207 раз)
AlexEx
Чайник
*
Offline Offline

Сообщений: 76


Просмотр профиля
« : Апрель 24, 2019, 10:53 »

На форуме Astra Linux мне не ответили, так что попробую спросить здесь.
Портирую несколько приложений с Windows 7 Qt 5.7 на Astra Linux (пока CE) Qt 5.11. Требуется полностью запретить пользователю закрывать и перемещать некоторые окна (не имеющие X или заголовка), а также запретить завершение приложений. Желательно вообще убрать системное меню и иконки из панели задач. Это ж надо было догадаться дать даже нерутовоному пользователю возможность грохнуть свое приложение из практически пользовательского интерфейса! И это ОС, разрешенная МО РФ! Сейчас под Windows все это делается платформенно зависимым способом. Как я понимаю, всё это надо делать через API fly-wm, а не через X11, или я ошибаюсь? Просьба подсказать, как это реализовать.
Записан
qate
Супер
******
Offline Offline

Сообщений: 1175


Просмотр профиля
« Ответ #1 : Апрель 24, 2019, 13:25 »

необходимо запретить даже killall my_app_ran_by_me ?
что такое делает приложение, что его нельзя прибить ? )
Записан
zhbr
Гость
« Ответ #2 : Апрель 24, 2019, 14:19 »

всё это надо делать через API fly-wm, а не через X11, или я ошибаюсь? Просьба подсказать, как это реализовать.
может нужно вобще тогда вместо запуска wm, запускать это приложение?

Это ж надо было догадаться дать даже нерутовоному пользователю возможность грохнуть свое приложение из практически пользовательского интерфейса! И это ОС, разрешенная МО РФ!
странные нападки...
Записан
AlexEx
Чайник
*
Offline Offline

Сообщений: 76


Просмотр профиля
« Ответ #3 : Апрель 24, 2019, 15:16 »

Приложение отображает мнемосхемы технологического процесса. Убив приложение оператор может пропустить много важного и не выполнить вовремя то, что положено. От wm врядли можно избавиться (хотя такая идея и приходила мне в голову, а другая бредовая идея была попробовать OpenGl :-) - но тут я не специалист), так как в перспективе переход на SE версию.
Записан
ssoft
Программист
*****
Offline Offline

Сообщений: 574


Просмотр профиля
« Ответ #4 : Апрель 24, 2019, 15:17 »

Требуется полностью запретить пользователю закрывать и перемещать некоторые окна (не имеющие X или заголовка), а также запретить завершение приложений.

Это можно запретить с помощью перехвата событий QCloseEvent, QMoveEvent и др. Возврат по ним false и/или задание фиксированной геометрии даст желаемый результат.

Желательно вообще убрать системное меню и иконки из панели задач. Это ж надо было догадаться дать даже нерутовоному пользователю возможность грохнуть свое приложение из практически пользовательского интерфейса!

Это делается через системные настройки.
Не отображать окно в системном меню можно, например, задав ему свойство Qt::Tool.
« Последнее редактирование: Апрель 24, 2019, 15:20 от ssoft » Записан
AlexEx
Чайник
*
Offline Offline

Сообщений: 76


Просмотр профиля
« Ответ #5 : Апрель 24, 2019, 15:47 »

Собственно так сейчас все и сделано - closeevent игнорируется, на move посажен свой обработчик. Засада в том, что moveevent происходит только в начале и конце перемещения окна (и то уже после перемещения), так что окно все-таки перемещается и если не завершать процесс перемещения, окно может быть оставлено где угодно (почти). Qt::Tool и так есть и прекрасно работает под Windows, но вот Астре он пофигу. Ну и самый криминал - возможность посылки SIGKILL. Похоже, надо будет все-таки решать проблему работы без wm.

Записан
ssoft
Программист
*****
Offline Offline

Сообщений: 574


Просмотр профиля
« Ответ #6 : Апрель 24, 2019, 15:59 »

В Астре, как и любом другом линуксе, много разных оконных менеджеров. У многих из них обширный набор опций для управления окнами. Разные политики могут устанавливаться даже по названию окна. Можете даже свой менеджер написать на базе какого-нибудь opensource.
Записан
qate
Супер
******
Offline Offline

Сообщений: 1175


Просмотр профиля
« Ответ #7 : Апрель 24, 2019, 16:15 »

Ну и самый криминал - возможность посылки SIGKILL.

Так ведь и в венде есть taskkill

Можно написать скрипт перезапуска приложения по завершению
Там же использую xdotool периодически открывать окно на полный экран )
Записан
AlexEx
Чайник
*
Offline Offline

Сообщений: 76


Просмотр профиля
« Ответ #8 : Апрель 24, 2019, 16:23 »

В Винде надо еще добраться до taskkill, а Ctrl-Alt-Del (и многое другое) можно ведь и запретить, а тут SIGKILL в системном меню прямо рядом с пунктом закрытия окна.
Записан
qate
Супер
******
Offline Offline

Сообщений: 1175


Просмотр профиля
« Ответ #9 : Апрель 24, 2019, 16:30 »

Конечно открыть командную строку не всем под силам в венде )
Но такие решения не надежны

Для надежности стоит писать сервис, работающий от рута или другого пользователя
А обычному юзеру - морду-клиент с перезапуском. При важном сигнале от сервера клиент можно выводить поверх всех окон.
Тут конечно придется сильно доработать приложение.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #10 : Апрель 24, 2019, 16:45 »

2AlexEx Вы бы рассказали, чего вы хотите достичь в конце концов. Для чего такие ограничения пользователя?
Что будет доступно пользователю (мышь и клавиатура или только мышь)? Если у пользователя будет клавиатура, то любое окно он сможет закрыть через Ctrl-Alt-Esc (эта функция самих иксов) - вместо курсора появиться череп, наводите его на нужное окно и кликаете. Приложение уже ничего с этим не сделает. Эту возможность также нужно как-то отключать.
Записан
AlexEx
Чайник
*
Offline Offline

Сообщений: 76


Просмотр профиля
« Ответ #11 : Апрель 25, 2019, 10:55 »

Попробую объяснить, что и для чего. Есть самописная SCADA система 1999-го года рождения. Технологический процесс неважен. Все в ней работает как надо, что много раз проверено. Вот только весь пользовательский интерфейс рабочих мест операторов сделан под Windows (сначала NT 4.0, потом XP, потом Windows 7). Теперь у нас импортозамещение и в список разрешенных ОС Windows больше не входит (а ведь NT 4.0 когда-то входила), а вот Astra Linux SE входит. И показалось, что она наиболее вменяемая, так что надо портировать. Ошибки оператора могут стоить ну очень дорого. Отсюда и весь наезд.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #12 : Апрель 25, 2019, 11:03 »

Попробую объяснить, что и для чего. Есть самописная SCADA система 1999-го года рождения. Технологический процесс неважен. Все в ней работает как надо, что много раз проверено. Вот только весь пользовательский интерфейс рабочих мест операторов сделан под Windows (сначала NT 4.0, потом XP, потом Windows 7). Теперь у нас импортозамещение и в список разрешенных ОС Windows больше не входит (а ведь NT 4.0 когда-то входила), а вот Astra Linux SE входит. И показалось, что она наиболее вменяемая, так что надо портировать. Ошибки оператора могут стоить ну очень дорого. Отсюда и весь наезд.
По моему опыту, такие системы необходимо реализовывать следующим образом: есть ядро системы управления, реализованное как набор демонов (служб), которые и реализуют весь техпроцесс. И есть отдельно графический клиент, который может корректировать работу ядра. Даже если на время графический клиент будет закрыт, то на работе всей системы это никак не отразиться.
Ядро должно быть максимально надежным, с возможностью автоматического перезапуска подсистем демонов, а GUI является лишь средством просмотра телеметрии и корректировки параметров ядра. Тут можно ничего не блокировать, закрыл оператор GUI ну и ладно, захочет посмотреть/откорректировать параметры - запустит сам.

При таком подходе, становится не важно где запущен графический клиент, на управляющем десктопе или на мобильном планшете. И запущен ли вообще.

IMHO, это чисто вендовый подход, когда один бинарник и техпроцессом управляет и GUI отображает, и кино показывает. Когда все разделено, можно из "кубиков" собирать более сложные и надежные системы.
« Последнее редактирование: Апрель 25, 2019, 11:22 от Old » Записан
AlexEx
Чайник
*
Offline Offline

Сообщений: 76


Просмотр профиля
« Ответ #13 : Апрель 25, 2019, 11:23 »

Мы же не на облаке живем, на разработку нового правильного ПО никто денег не даст, тем более что все и так работает. Да и дело не в надежности самого ПО, все строировано и зарезервировано. Дело в том, что при случайном закрытии пользовательского интерфейса оператор может проморгать важное событие. Прокурор-то его потом в архиве найдет :-). Так что возможность ошибки оператора должна быть сведена к минимуму. Речь идет именно об ошибке, целенаправленные действия не рассматриваем.
Кстати, по Ctrl-Alt-Esc ничего не происходит - сейчас проверил.
Записан
AlexEx
Чайник
*
Offline Offline

Сообщений: 76


Просмотр профиля
« Ответ #14 : Апрель 25, 2019, 11:27 »

PS
To Old.
Техпроцессом управляют совсем другие вычислительные средства, эти машины АРМ - только GUI.
Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.057 секунд. Запросов: 22.