Russian Qt Forum
Ноябрь 22, 2024, 17:59
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
Как запретить закрытие окон под Astra Linux
Страниц: [
1
]
2
3
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Как запретить закрытие окон под Astra Linux (Прочитано 26849 раз)
AlexEx
Чайник
Offline
Сообщений: 76
Как запретить закрытие окон под Astra Linux
«
:
Апрель 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
Сообщений: 1177
Re: Как запретить закрытие окон под Astra Linux
«
Ответ #1 :
Апрель 24, 2019, 13:25 »
необходимо запретить даже killall my_app_ran_by_me ?
что такое делает приложение, что его нельзя прибить ? )
Записан
zhbr
Гость
Re: Как запретить закрытие окон под Astra Linux
«
Ответ #2 :
Апрель 24, 2019, 14:19 »
Цитата: AlexEx от Апрель 24, 2019, 10:53
всё это надо делать через API fly-wm, а не через X11, или я ошибаюсь? Просьба подсказать, как это реализовать.
может нужно вобще тогда вместо запуска wm, запускать это приложение?
Цитата: AlexEx от Апрель 24, 2019, 10:53
Это ж надо было догадаться дать даже нерутовоному пользователю возможность грохнуть свое приложение из практически пользовательского интерфейса! И это ОС, разрешенная МО РФ!
странные нападки...
Записан
AlexEx
Чайник
Offline
Сообщений: 76
Re: Как запретить закрытие окон под Astra Linux
«
Ответ #3 :
Апрель 24, 2019, 15:16 »
Приложение отображает мнемосхемы технологического процесса. Убив приложение оператор может пропустить много важного и не выполнить вовремя то, что положено. От wm врядли можно избавиться (хотя такая идея и приходила мне в голову, а другая бредовая идея была попробовать OpenGl :-) - но тут я не специалист), так как в перспективе переход на SE версию.
Записан
ssoft
Программист
Offline
Сообщений: 584
Re: Как запретить закрытие окон под Astra Linux
«
Ответ #4 :
Апрель 24, 2019, 15:17 »
Цитата: AlexEx от Апрель 24, 2019, 10:53
Требуется полностью запретить пользователю закрывать и перемещать некоторые окна (не имеющие X или заголовка), а также запретить завершение приложений.
Это можно запретить с помощью перехвата событий QCloseEvent, QMoveEvent и др. Возврат по ним false и/или задание фиксированной геометрии даст желаемый результат.
Цитата: AlexEx от Апрель 24, 2019, 10:53
Желательно вообще убрать системное меню и иконки из панели задач. Это ж надо было догадаться дать даже нерутовоному пользователю возможность грохнуть свое приложение из практически пользовательского интерфейса!
Это делается через системные настройки.
Не отображать окно в системном меню можно, например, задав ему свойство Qt::Tool.
«
Последнее редактирование: Апрель 24, 2019, 15:20 от ssoft
»
Записан
AlexEx
Чайник
Offline
Сообщений: 76
Re: Как запретить закрытие окон под Astra Linux
«
Ответ #5 :
Апрель 24, 2019, 15:47 »
Собственно так сейчас все и сделано - closeevent игнорируется, на move посажен свой обработчик. Засада в том, что moveevent происходит только в начале и конце перемещения окна (и то уже после перемещения), так что окно все-таки перемещается и если не завершать процесс перемещения, окно может быть оставлено где угодно (почти). Qt::Tool и так есть и прекрасно работает под Windows, но вот Астре он пофигу. Ну и самый криминал - возможность посылки SIGKILL. Похоже, надо будет все-таки решать проблему работы без wm.
Записан
ssoft
Программист
Offline
Сообщений: 584
Re: Как запретить закрытие окон под Astra Linux
«
Ответ #6 :
Апрель 24, 2019, 15:59 »
В Астре, как и любом другом линуксе, много разных оконных менеджеров. У многих из них обширный набор опций для управления окнами. Разные политики могут устанавливаться даже по названию окна. Можете даже свой менеджер написать на базе какого-нибудь opensource.
Записан
qate
Супер
Offline
Сообщений: 1177
Re: Как запретить закрытие окон под Astra Linux
«
Ответ #7 :
Апрель 24, 2019, 16:15 »
Цитата: AlexEx от Апрель 24, 2019, 15:47
Ну и самый криминал - возможность посылки SIGKILL.
Так ведь и в венде есть taskkill
Можно написать скрипт перезапуска приложения по завершению
Там же использую xdotool периодически открывать окно на полный экран )
Записан
AlexEx
Чайник
Offline
Сообщений: 76
Re: Как запретить закрытие окон под Astra Linux
«
Ответ #8 :
Апрель 24, 2019, 16:23 »
В Винде надо еще добраться до taskkill, а Ctrl-Alt-Del (и многое другое) можно ведь и запретить, а тут SIGKILL в системном меню прямо рядом с пунктом закрытия окна.
Записан
qate
Супер
Offline
Сообщений: 1177
Re: Как запретить закрытие окон под Astra Linux
«
Ответ #9 :
Апрель 24, 2019, 16:30 »
Конечно открыть командную строку не всем под силам в венде )
Но такие решения не надежны
Для надежности стоит писать сервис, работающий от рута или другого пользователя
А обычному юзеру - морду-клиент с перезапуском. При важном сигнале от сервера клиент можно выводить поверх всех окон.
Тут конечно придется сильно доработать приложение.
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Как запретить закрытие окон под Astra Linux
«
Ответ #10 :
Апрель 24, 2019, 16:45 »
2AlexEx Вы бы рассказали, чего вы хотите достичь в конце концов. Для чего такие ограничения пользователя?
Что будет доступно пользователю (мышь и клавиатура или только мышь)? Если у пользователя будет клавиатура, то любое окно он сможет закрыть через Ctrl-Alt-Esc (эта функция самих иксов) - вместо курсора появиться череп, наводите его на нужное окно и кликаете. Приложение уже ничего с этим не сделает. Эту возможность также нужно как-то отключать.
Записан
AlexEx
Чайник
Offline
Сообщений: 76
Re: Как запретить закрытие окон под Astra Linux
«
Ответ #11 :
Апрель 25, 2019, 10:55 »
Попробую объяснить, что и для чего. Есть самописная SCADA система 1999-го года рождения. Технологический процесс неважен. Все в ней работает как надо, что много раз проверено. Вот только весь пользовательский интерфейс рабочих мест операторов сделан под Windows (сначала NT 4.0, потом XP, потом Windows 7). Теперь у нас импортозамещение и в список разрешенных ОС Windows больше не входит (а ведь NT 4.0 когда-то входила), а вот Astra Linux SE входит. И показалось, что она наиболее вменяемая, так что надо портировать. Ошибки оператора могут стоить ну очень дорого. Отсюда и весь наезд.
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Как запретить закрытие окон под Astra Linux
«
Ответ #12 :
Апрель 25, 2019, 11:03 »
Цитата: AlexEx от Апрель 25, 2019, 10:55
Попробую объяснить, что и для чего. Есть самописная 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
Сообщений: 76
Re: Как запретить закрытие окон под Astra Linux
«
Ответ #13 :
Апрель 25, 2019, 11:23 »
Мы же не на облаке живем, на разработку нового правильного ПО никто денег не даст, тем более что все и так работает. Да и дело не в надежности самого ПО, все строировано и зарезервировано. Дело в том, что при случайном закрытии пользовательского интерфейса оператор может проморгать важное событие. Прокурор-то его потом в архиве найдет :-). Так что возможность ошибки оператора должна быть сведена к минимуму. Речь идет именно об ошибке, целенаправленные действия не рассматриваем.
Кстати, по Ctrl-Alt-Esc ничего не происходит - сейчас проверил.
Записан
AlexEx
Чайник
Offline
Сообщений: 76
Re: Как запретить закрытие окон под Astra Linux
«
Ответ #14 :
Апрель 25, 2019, 11:27 »
PS
To Old.
Техпроцессом управляют совсем другие вычислительные средства, эти машины АРМ - только GUI.
Записан
Страниц: [
1
]
2
3
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...