HID キーの削除時にセッションをロックする udev ルール

HID キーの削除時にセッションをロックする udev ルール

HyperFIDO U2F キーである HID デバイスを削除したときにセッションをロックしようとしています。 しかし、何度も試しても成功しませんでした。

/etc/udev/rules.d/50-lockscreen.rules次のようなudev ルールを作成しようとしました。

SUBSYSTEM="hid", ACTION=="remove", RUN+="/usr/local/bin/lock.sh"

呼び出すスクリプトはlock.sh次のようになります。

#!/bin/bash
/usr/bin/gnome-screensaver-command --lock

誰か助けてくれませんか?

答え1

systemd を使用するディストリビューションを使用していると仮定します。その場合...

これを見てページ削除に関連する特定のイベント (複数ある可能性があります) と一致するようにルールに組み込むキー デバイス情報を取得する方法に関する情報を取得し、ルールの RUN 部分に と入力します/usr/bin/loginctl lock-sessions。udev ルールを再読み込みし、キーを取り出すと、画面がロックされ、そのマシン上のすべてのセッションもロックされます。

ロックする1つセッションでは、特定のセッション ID を見つけてそのセッションだけをロックする必要がありますが、ルート権限を持っている場合は、そのマシン全体を自分専用にできる可能性があります。ほとんどの場合、すべてのセッションをロックしても問題はありません。

これで完了です。

答え2

最も可能性の高い説明は、gnome-screensaver-commandがudevが提供するコンテキストで実行されると、だれのスクリーンセーバーオンどのディスプレイこれは、本来のコマンドですが、ユーザー アカウントで実行されておらず、X ユーザー セッション全体に伝播される環境変数がありません。

できるアプローチおそらく働かされる:

  • su権限でgnome-screensaver-commandを実行します。
  • DISPLAY環境変数がXセッション内のターミナルと同じ値に設定されていることを確認してください。
  • Xセッションへの接続権限が確立されていることを確認してください。これにはxauthやxhostをいじる必要がありますが、詳細は実際の設定に大きく依存します。

この問題をさらに詳しく説明すると、gnome がインフラストラクチャとして使用している X11 では、「複数の独立したセッションがあり、それぞれに異なるユーザー アカウントがログインしていて、ファンクション キーで切り替え可能、または異なるモニターやマウス/キーボードに接続されている可能性があります」(「マルチシート」) や、「実際のセッションは、モニターや HID デバイスが接続されているマシンとは別のマシンで実行されています」(「XDMCP」がここでのキーワードです) などのシナリオが可能です。「1 つのセッション、1 人のユーザー」は、実際には 1 つの使用例にすぎず、そのようなセッションの一部ではないものの、セッション内の何かに干渉するコマンドが適切に反応する方法を認識できる唯一の例ですが、その場合のための特別な準備は組み込まれていません。

答え3

マンページにはこう書かれています:

 RUN{type}
      ...
      This can only be used for very short-running foreground tasks.
      Running an event process for a long period of time may block all
      further events for this or a dependent device.

      Starting daemons or other long-running processes is not appropriate
      for udev; the forked processes, detached or not, will be
      unconditionally killed after the event handling has finished.

したがって、udev ルールではこれを行うことはできません。ただし、ログイン時に起動する別のプログラムと通信するために udev ルールを使用することで、スクリーンセーバーをオンにすることができます。これにより、そのプログラムに正しい DISPLAY、権限 Cookie などを提供するという問題も解決されます。

また、この機能は、たとえ多くの人がこの機能を知らず、使用していなくても、X が明示的にこれを許可するように記述されているため、複数のユーザーがログインして X を使用している場合 (複数の画面がある場合は物理的に、またはリモートで) に何が起こるかという問題も解決します。

関連情報