簡體   English   中英

Linux Java Swing應用程序的信息亭模式

[英]Kiosk mode for Linux Java Swing application

如何在[Ubuntu] Linux機器上禁用OS級鍵盤快捷鍵(例如Alt-Tab,Ctrl-Alt-左/右等)? 我正在開發全屏Java Swing應用程序,並且不希望用戶能夠任意切換程序。 僅切換“ always on top”標志始終是不夠的。 不允許用戶切換工作區,轉移焦點或任何其他此類事情。 在執行應用程序之前和之后,機器必須正常運行。 谷歌表示這將需要JNI或JNA,但我正在尋找更多功能。

嘗試在您的應用程序中執行此操作沒有任何意義,因為X11和/或窗口管理器將需要處理所有這些更改,因為這些都是對命令的響應。 假設您可以控制平台,請選擇一個支持信息亭模式的窗口管理器。 然后使用窗口管理器的設置啟動您的應用程序並進入信息亭模式。

可以執行此操作的窗口管理器選項包括KDEtwm-kiosk

(而且,如果您無法控制該平台,則您無論如何都無法讓您的應用程序攔截ctrl-alt-backspace之類的東西。)

編輯:

為了縮小這個問題的規模,他願意放開ctl-alt-backspace之類的東西,只想要大多數鍵,包括alt-tab或其他類似的應用程序切換鍵組合,下面的方法應該起作用:

您應該能夠通過JNI使用XLib的XGrabKeyboard方法執行此操作。 Java / XLib JNI鍵捕獲教程應該是一個很好的起點。 但是,它使用XGrabKey只是被動地偵聽密鑰,並不阻止其他應用程序接收它們。 您將改為使用XGrabKeyboard,它可以主動捕獲所有正常的鍵盤事件(如果 StackOverflow問題的前提是正確的,則包括任務切換鍵)。

請注意,作為副作用,Swing中的鍵捕獲也可能會停止工作,因為您的Swing窗口將與在C中創建的窗口分開。因此,您可能必須使用JNI界面來獲得按鍵。在需要時將其添加到您的程序中。 (盡管我肯定會建議您在編寫代碼之前先對其進行測試。)如果可以使用Java AWT本機接口獲取窗口ID來獲取窗口,則可以避免這種情況。 (請注意,Swing是在AWT之上構建的,因此這將適用於Swing。)但是,我不確定如何執行此操作。 看起來您可能能夠通過從“顯示器”獲取根窗口並從那里查找窗口來導航窗口樹,但這有點奇怪。 如果AWT NI只是告訴您窗口ID,那就好了,但是看起來不像那樣。

正如此警告提醒:XGrabKeyboard不是安全界面上所述 ,這不會使其他程序看不到密鑰,但是窗口管理器似乎不會使用XQueryKeyMap,因此可能會阻止任務切換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM