web-dev-qa-db-ja.com

ログイン時にpam_execを使用して通知を表示する

この単純なスクリプトは、ユーザーがログインしたときにZenity通知を表示します。

case "$PAM_TYPE" in
    'open_session' )
    if [ "$PAM_SERVICE" = "lightdm" ] ; then
            DISPLAY=:0 Sudo -u $PAM_USER notify-send "Hello there!" "Hello"
        else
            echo "Hello there!"
        fi
    ;;
esac

ただし、これはDISPLAY変数が実際に0の場合にのみ機能します。また、ターミナルまたはリモート(ssh)ログインでは機能しません(明らかに、エコーがどこにもないようです)。これについて私は何ができますか?

次の方法が必要です:

  • グラフィカルログインインターフェイスを使用している場合は、pam_exec環境から現在のDISPLAY変数を取得します。
  • 現在のコンソールデバイス、またはコンソールインターフェイスを使用している場合は、適切なコンソールにメッセージを送信できる場所を取得します。

ログイン時に通知を送信するより簡単な方法が存在します(DISPLAY変数を知らない、またはttyコマンドを使用して端末を識別することなく)。

GNOMEまたは他のデスクトップ環境の起動中に通知を送信するには、/etc/xdg/autostart/foobar.desktopを使用してスクリプトを呼び出すnotify-send "Hello there!" "Hello"ファイルを作成する必要があります。例として/etc/xdg/autostart/を確認してください。既存の.desktopファイルのコピーを作成し、名前を変更して、必要に応じて変更できます。 X-GNOME-Autostart-Delay=XXパラメータを追加して、タスクのXX秒の遅延を設定することもできます。選択したユーザーに対してのみこれを追加する必要がある場合は、そのユーザーの~/.config/autostart/を使用して.desktopファイルを配置し、このランチャーがアクティブであることをgnome-session-propertiesで確認します。

端末またはsshログインで通知を送信するには、/etc/profile.d/に配置されたスクリプトを使用するか、echo "My Message"/etc/bash.bashrcに直接追加してこの通知を送信できます。どちらも/etc/profileから呼び出され、インタラクティブシェルへのログインごとに実行されます(仮想端末またはsshログイン)。選択したユーザーに対して、そのユーザーの~/.bash_loginを使用して、そこに必要なメッセージを入力します。 注:/etc/bash.bashrcおよび~/.bash_loginの使用は、デフォルトのbashシェルが使用されている場合に意味があります。ユーザーが/bin/sh/などの他のシェルを呼び出した場合、これらのファイルは無視されます。

1
whtyger