当前位置:首页 > 操作系统 > Ios

适用于Linux Java Swing应用程序的Kiosk模式

如何在[Ubuntu] Linux机器上禁用操作系统级键盘快捷键(例如Alt-Tab,Ctrl-Alt-Left / Right等)?我正在开发一个全屏Java Swing应用程序,并且不希望用户能够任意切换程序.仅仅切换“永远在线”标志是不够的;不得允许用户切换工作区,迁移焦点或任何其他此类事物.在执行应用程序之前和之后,机器必须正常运行.谷歌说,这将需要JNI或JNA,但我正在寻找更多的手持.

解决方法:

尝试在您的应用程序中执行此操作没有意义,因为任何这些更改都需要由X11和/或窗口管理器处理,因为这些更改是对命令的响应.假设您可以控制平台,请选择支持信息亭模式的窗口管理器.然后使用窗口管理器的设置启动应用程序并进入信息亭模式.

可以执行此操作的窗口管理器选项包括KDEtwm-kiosk.

(如果您无法控制平台,那么您可能无法让应用程序拦截ctrl-alt-backspace等内容.)

编辑:

在回答问题的缩小版本时,他愿意让ctl-alt-backspace之类的东西去,并且只想要大多数键,包括alt-tab或其他类似的应用程序切换键组合,以下内容应该有效:

您应该能够通过JNI使用XLib的XGrabKeyboard方法执行此操作.这Java/XLib JNI keypress capture tutorial应该是一个很好的起点.但是,它使用XGrabKey,它只是被动地侦听密钥,并不会阻止其他应用程序接收它们.你会想要使用XGrabKeyboard来主动阻止所有正常的键盘事件(如果this StackOverflow问题的前提是正确的话,它包括任务切换键).

请注意,作为副作用,Swing中的键捕获也可能会停止工作,因为您的Swing窗口将与您在C中创建的窗口分开.因此,您可能必须使用JNI接口来获取按键在需要时到你的程序. (虽然我肯定会建议在编写代码之前先测试它.)如果你可以使用Java AWT Native Interface来获取窗口ID,那么你可以避免这种情况. (注意,Swing是建立在AWT之上的,所以这适用于Swing.)但是,我不知道如何做到这一点.看起来你可以通过从显示器获取根窗口并从那里找到你的窗口来导航窗口树,但它有点奇怪.如果AWT NI只是告诉你窗口ID会很好,但它看起来不像那样.

正如此警告Reminder: XGrabKeyboard is not a security interface所述,这并不能让其他程序看不到密钥,但是窗口管理器似乎不会使用XQueryKeyMap,因此可能会阻止任务切换.


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!