コメントでmazsが指摘した、Ask Ubuntuのgertvdijkによるこの投稿をコピーしました。この質問を締めくくる努力において。
BkkBonanzaによるUbuntuforumsに関するこの投稿に基づいています。
これはPAMを使用するアプローチであり、失敗したすべてのログイン試行で機能します。SSH、仮想端末、または通常のログイン画面を使用すると、すべてが最終的にPAMによって処理されるため、問題になりません。
ffmpegをインストールします。これをWebカメラの画像を取得するコマンドラインの方法として使用します。更新:Ubuntu 14.04にアップグレードすると、ffmpegは削除されます。以下のスクリプトでは、ffmpegの代わりにavconvを使用できます。個別にインストールする必要はありません。
どこかに小さなスクリプトを作成します。たとえば/usr/local/bin/grabpicture
、次のコンテンツを使用します
#!/bin/bash
ts=`date +%s`
ffmpeg -f video4linux2 -s vga -i /dev/video0 -vframes 3 /tmp/vid-$ts.%01d.jpg
exit 0 #important - has to exit with status 0
/ dev / video0をWebカメラの実際のビデオデバイスに変更し、画像が保存されているパスを選択します-選択するだけ/tmp
です。Ubuntuの新しいバージョンでavconv
は、ffmpeg
(sudo apt-get install libav-tools
)の代わりに使用します。
実行可能にしchmod +x /usr/local/bin/grabpicture
ます。
呼び出すだけでテストできます/usr/local/bin/grabpicture
。に表示されるファイルを確認します/tmp/vid....jpg
。
試行が失敗するたびにこれを呼び出すようにPAMを構成します。
注:これは慎重に行ってください。失敗すると、通常の方法でシステムに再びアクセスできなくなります。
- rootアクセスでターミナルウィンドウを開き(sudo -i)、開いたままにします-次のステップで失敗する場合に備えて。
を実行するなど/etc/pam.d/common-auth
して、お気に入りのエディターで開きますgksudo gedit /etc/pam.d/common-auth
。このファイルの行の順序が重要である次の手順に注意してください。
以下の行を見つけます。デフォルトでは、のある行の前に1行ありますpam_deny.so
。私の12.04システムでは、次のようになります。
auth [success=1 default=ignore] pam_unix.so nullok_secure
この行で、成功時にスクリプトをスキップするには、success = 1をsuccess = 2に変更します。これは重要なステップです。
そのすぐ下に、実際のスクリプトを呼び出す新しいスクリプトを追加します。
auth [default=ignore] pam_exec.so seteuid /usr/local/bin/grabpicture
ファイルを保存して閉じます。何も再起動する必要はありません。
試して。
- 新しいターミナルウィンドウで、通常のユーザー
su -l username
として、ユーザー名を使用して別のユーザーとしてログインしてみますusername
(もちろん実際のユーザーで変更してください)。意図的に間違ったパスワードを入力してください。これが新しい画像になるかどうかを確認します。
- 上記と同じですが、正しいパスワードを入力してください。ログインして、写真が撮れないことを確認してください。
テストが成功した場合、DE(Unity / KDE / ...)からログアウトできます。ログイン画面から間違ったパスワードを入力すると、同じものが表示されるはずです。