私はこの記事をスーパーユーザー情報センターに投稿しましたが、ここでより早く答えを見つけることができると言われました。
ユーザーがログインしている間に画面をアクティブに保つ機能を自分のアプリケーションに追加したいと思います。その理由は、最近、ユーザーがタッチスクリーンを介してUIを制御できるようにタッチスクリーン機能を実装したためです。しかし、私たちは古いLinuxカーネルを使用しているので、タッチスクリーン機能は限られています。つまり、カーネルがマルチタッチイベントを定義しても、Xorgはタッチに全く反応しません。そのため、Qt4アプリケーションのバックグラウンドでドライバを作成し、/dev/inputから直接タッチイベントを読み込み、アプリケーションでマウスイベントを生成しました。
ただし、これらのマウスイベントはシステム全体に適用されず、Qtアプリケーション内に含まれているため、画面を目覚めさせず、スクリーンセーバーが起動した後も目覚めません。タッチスクリーンの目的は、ユーザーが製品でキーボードとマウスを使用する必要をなくすことです。スクリーンセーバーを覚醒できないと使用しにくいことがあります。
アプリケーションにはすでに60秒ごとに実行するように設定されているQTimerがあります(アプリケーションの実行中に一部のシステムプロセスがこれらの設定を変更した場合)。 「スクリーンセーバーをブロック」したが、実行されるコマンドを見た後、そうでない理由は明らかです。使用するコマンドは次のように動作します。
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スクリーンセーバー、ログイン時にアプリが起動しないようにする方法はありますか?それとも、この問題を解決するために取るべき他のアプローチがありますか?
重要な場合は、Scientific Linux 6.4(カーネル2.6.32-754)を実行しています。
編集する:言及するのを忘れました。デスクトップ環境はKDE4です。
編集する:表示されたスクリーンセーバーに一致するKSSファイルが見つかりました。名前を変更しようとしましたが、その場所に空のスクリーンセーバーが表示されました。開始するサービスを無効にする方法を知る必要があります。
答え1
したがって、これは最善のアプローチではないかもしれませんが、スクリーンセーバー/ロックマークを停止する方法を見つけました。バイナリを見つけました画面ロック下の/usr/libexec/kde4
ファイル名を変更すると、ファイルが実行できなくなり、画面がロックされないように見えます。
答え2
/dev/inputから読み続けることはできますが、生成されたマウスイベントをアプリケーションに送信するのではなく(したがってシステムから隠すのではなく)、ユーザースペースドライバを介してシステムに送信します。
これにより、これらのイベントは通常のマウスイベントと同じパスに従い、スクリーンセーバーを無効にできます。
今後:
/dev/input -> your_driver -> application
後ろに:
/dev/input -> your_driver -> uinput -> X -> application
ドライバからアプリケーションを完全に分離することもできます。
この問題これを行う方法にはいくつかの答えがあります。