在 Scientific Linux 6.4 中阻止螢幕保護程序
我已經將此發佈到超級使用者交換,但被告知我可以在這裡更快地找到答案。
我正在嘗試向應用程序添加一項功能,以在使用者登錄時保持螢幕喚醒。原因是我最近實現了觸摸屏功能,以允許使用者通過觸摸屏控制 UI。然而,因為我們有一個過時的 Linux 核心,我們的觸摸屏功能有限——這意味著雖然核心定義了多點觸控事件,但 Xorg 根本不響應觸摸。所以我在 Qt4 應用程序的後台編寫了一個驅動程序來直接從 /dev/input 讀取觸摸事件並在應用程序中生成滑鼠事件。
但是,因為這些滑鼠事件不在系統級別上並且包含在 Qt 應用程序中,所以它們不會使螢幕保持喚醒狀態,也不會在螢幕保護程序啟動後喚醒它。觸摸屏的目標是讓使用者在我們的產品上不再需要鍵盤和滑鼠,並且無法喚醒螢幕保護程序會使其難以使用。
該應用程序已經有一個 QTimer 設置,它每 60 秒觸發一次(以防某些系統程序在應用程序執行時更改這些設置)以“防止螢幕保護程序”,但是在查看它發出的命令之後,很明顯為什麼它沒有’不起作用,因為它使用的命令是:
xset s on
所以我更改了計時器,改為發出以下命令:
xset s off xset s noblank xset -dpms
我還嘗試執行此命令以嘗試阻止 xdg-screensaver 啟動:
xwininfo -name "plasma-desktop" | grep "plasma" | cut -d' ' -f4 | xdg-screensaver suspend
但是,即使進行了這些更改,螢幕保護程序最終還是會出現。
我需要禁用其他設置以防止這種情況嗎?假設出現的螢幕保護程序是作業系統啟動xdg-screensaver的結果,有沒有辦法在我們的應用程序登錄時阻止啟動該應用程序?或者我還有其他方法可以解決這個問題嗎?
如果重要的話,我們正在執行 Scientific Linux 6.4(核心 2.6.32-754)。
**編輯:**忘了提,桌面環境是 KDE4。
**編輯:**我找到了一個與顯示的螢幕保護程序匹配的 KSS 文件。我嘗試重命名它,但這只會導致空白螢幕保護程序出現在它的位置。我需要知道如何禁用正在啟動它的服務。
所以這可能不是最好的方法,但我想出了一種讓螢幕保護程序/鎖定停止出現的方法。我在下找到了kscreenlocker
/usr/libexec/kde4
的二進製文件,重命名文件似乎可以通過確保無法執行來防止螢幕鎖定。
您仍然可以從 /dev/input 讀取,但不是將生成的滑鼠事件發送到應用程序(因此對系統隱藏),而是通過使用者空間驅動程序將它們發送到系統。
然後事件將遵循與普通滑鼠事件相同的路徑,允許您停用螢幕保護程序。
前:
/dev/input -> your_driver -> application
後:
/dev/input -> your_driver -> uinput -> X -> application
您甚至可以將應用程序與驅動程序完全分離。
這個問題有一些關於如何做的答案。