Как убедиться, что пользователь не может делать что-либо еще, как только мое окно будет показано в linux / mac [duplicate]

У меня уже установлен python3 (через miniconda3) и вам нужно установить python2 рядом, в этом случае brew install python не будет устанавливать python2, поэтому вам понадобится brew install python@2.

Теперь псевдоним python2 относится к python2.x из /usr/bin/python

, а псевдоним python3 относится к python3.x из /Users/ishandutta2007/miniconda3/bin/python

, а псевдоним python по умолчанию относится к python3.

Теперь, чтобы использовать python как псевдоним для python2, я добавил следующее в .bashrc файл

alias python='/usr/bin/python'.

Чтобы вернуться к python3 по умолчанию, просто удалите эту строку, когда это необходимо.

2
задан Hollis Waite 20 October 2011 в 05:18
поделиться

1 ответ

Нет смысла пытаться сделать это в своем приложении, потому что любой из этих изменений нужно будет обрабатывать X11 и / или диспетчер окон, поскольку это то, что отвечает командам. Предполагая, что у вас есть контроль над платформой, выберите диспетчер окон, который поддерживает режим киоска. Затем используйте настройки оконного менеджера, чтобы запустить приложение и войти в режим киоска.

Опции для оконных менеджеров, которые могут это сделать, включают в себя KDE или twm-kiosk .

(И если у вас нет контроля над платформой, вы вряд ли сможете в любом случае перехватить такие вещи, как ctrl-alt-backspace.)

Редактировать:

В ответ на уменьшенную версию вопроса, в котором он готов позволить вещам, подобным ctl-alt-backspace, пойти и просто хочет большинство ключей, включая alt-tab или другое подобное приложение следующие комбинации должны работать:

Вы можете сделать это с помощью метода XLib XGrabKeyboard через JNI. Это Java / XLib JNI-приложение для захвата нажатия клавиши должно быть хорошей отправной точкой. Однако он использует XGrabKey, который просто пассивно слушает ключи и не мешает другим приложениям получать их. Вместо этого вы захотите использовать XGrabKeyboard, который активно блокирует все обычные события клавиатуры (что, если предпосылка этого вопроса StackOverflow верна, включает ключи переключения задач).

Обратите внимание, что в качестве побочного эффекта захват клавиш в Swing также, вероятно, перестанет работать, потому что ваши окна Swing будут отделены от окна, которое вы создаете на C. Таким образом, вам, вероятно, придется использовать интерфейс JNI для получения ключа при необходимости нажимает на вашу программу. (Хотя я бы определенно посоветовал сначала тестировать его перед написанием кода.) Возможно, вы сможете избежать этого, если вы можете получить окно, используя Java AWT Native Interface , чтобы получить идентификатор окна. (Обратите внимание, что Swing построен поверх AWT, так что это будет работать для Swing.) Однако я не знаю, как это сделать. Похоже, что вы можете перемещаться по дереву окон, получая из окна «Корневое окно» и идя оттуда, чтобы найти свое окно, но все это странно. Было бы неплохо, если AWT NI просто сказал вам идентификатор окна, но это не похоже на это.

Как это предупреждение Напоминание: XGrabKeyboard не является интерфейсом безопасности , это не делает невозможным просмотр другими программами ключей, но представляется вероятным, что оконные менеджеры не будут использовать XQueryKeyMap, поэтому он может предотвратить переключение задач.

4
ответ дан Community 19 August 2018 в 05:30
поделиться
  • 1
    Установщик приложения будет иметь аутентификацию на уровне администратора, но это зависит от моего контроля над системой. Вы хотите сказать, что мне нужно заставить ОС использовать определенный оконный менеджер до запуска моего приложения Java? Является ли это параметром, который я могу автоматически переключать, когда приложение запускается и возвращается после завершения выполнения (изящно или иначе)? Нужно ли мне права суперпользователя, чтобы сделать что-то подобное? Я всегда думал, что видеоигры Linux каким-то образом управляют враждебным захватом произвольно сконфигурированных машин. Возможно, я смогу использовать любую библиотеку, которую они используют. – Hollis Waite 20 October 2011 в 05:50
  • 2
    Я был бы очень удивлен, если бы очень много комбинаций игр для Linux, таких как ctrl-alt-backspace и тому подобное. Они не пытаются заблокировать пользователя из ОС, просто избегая случайного переключения. Это намного проще. – Keith Irwin 20 October 2011 в 06:07
  • 3
    Некоторый Googling вызывает разные мнения о том, возможно ли это. Этот поток: fixunix.com/xwindows/… заявляет, что VMWare удается захватить эти входы клавиатуры, когда он захватывает ввод с клавиатуры, и предполагает, что он каким-то образом использует DRI для этого. Этот faq для xscreensaver: jwz.org/xscreensaver/faq.html#no-ctl-alt-bs , с другой стороны, говорит, что это невозможно. Возможно, это было возможно, но это уже не так. Одна вещь, которую я могу гарантировать, хотя: если возможно, это боль. – Keith Irwin 20 October 2011 в 06:12
  • 4
    Что, если я откажусь от некоторых более амбициозных требований? Я могу жить с пользователями, способными убить приложение или выйти из системы. Хотите сделать это настолько неудобным, насколько возможно использовать другие приложения, пока мой активен. Если надежное решение является нетривиальным, я бы предпочел отключить Alt-Tab, Ctrl-Alt-Right / Left и другие ярлыки переключения задач, где это возможно. Может быть, вытащить пустой «всегда сверху»? окна на каждом рабочем пространстве пользователя. Если нажатие нажимает, я также могу отключить приложение для менеджеров окон, отличных от Gnome. В принципе, я хотел бы реализовать все контрмеры, которые квалифицируются как «более простая проблема». – Hollis Waite 20 October 2011 в 23:32
  • 5
    – Keith Irwin 21 October 2011 в 05:44
Другие вопросы по тегам:

Похожие вопросы: