独自のディスプレイ/ログイン管理者の開発を開始しようとしています。私はすべてのX11関連のタスクを処理できると思いましたが、ユーザーが自分のユーザー名とパスワードを入力したときに何をすべきかわかりませんでした。
ディスプレイ管理者がユーザー名とパスワードを持っているとどうなりますか?どうやってログインしますか?設定ファイルのインポートなど、ログインマネージャのその他の特定の要件はありますか?それとも、これらすべてがデスクトップ環境によって異なりますか?
答え1
この問題を理解するのにある程度進展があったと思うので、ここに私が知っている内容を投稿します。この回答は現在、以下を使用している人に効果的です。ポリアクリルアミド。他のログイン方法を見つけたら、さらに追加します。
[ディスプレイマネージャ]フィールドにユーザー名とパスワードを入力すると、ディスプレイマネージャはこれら2つのフィールドを使用してPAM認証プロセスを開始します。
まずを呼び出しますpam_start()
。これは、PAMにどのセッション機能を使用しているか(私たちはそれが何であるかを学びます)、pam_handle_t
初期化する構造を伝えます。このpam_handle_t
構造をすべての後続の呼び出しに渡します。
その後、を使用してユーザー名などのプロパティを設定できますpam_set_item()
。ここでユーザー名を設定する必要はありません。に電話すると、pam_authenticate()
まだ持っていない情報を要求します。
次に、電話してpam_authenticate()
ユーザー名とパスワードが有効であることを確認します。この時点で、pam_authenticate()
以下を使用していない情報を入手してください。会話機能。詳しくは、該当するリンクをご覧ください。簡単に言えば、PAMは、pam_start()
呼び出し後に渡された構造によって提供された会話機能を呼び出しますpam_authenticate()
。次に、一連のメッセージを会話機能に渡します。その場合はユーザー名msg_style
をPAM_PROMPT_ECHO_ON
要求し、その場合はmsg_style
パスワードPAM_PROMPT_ECHO_OFF
を要求してください。他の 2 つのオプションは仕様で説明されており、エラーおよび情報メッセージに使用されます。メッセージの種類に応じresp
て配列に応答を入力し、正しいエラーコードを返します。
今pam_authenticate()
を返すと、PAM_SUCCESS
ユーザーが存在するという意味です。その後、現在のユーザーがログイン権限を持っているかどうかを確認するために電話する必要がありますpam_acct_mgmt()
(この権限がどこにあるのか、どのように設定するのかわかりません)。
この時点で、トークンを取得してセッションを開くpam_setcred()
ために使用しますpam_open_session()
。これが何の目的なのか、実際にトークンがどのように使用されるのかはわかりませんが、必須です。ご存知の方はお知らせください。
これで、必要なすべてのbash変数を設定できますpam_putenv()
。環境に必要なものがすべてあれば、新しいプロセスをフォークしてからexec
コマンドを実行できますstartx
。
このプロセスが完了すると、ユーザーはログアウトされます。この時点でpam_close_session()
、pam_setcred
(オプションで資格情報の削除)をpam_end()
順番に呼び出します。
これらの内容の中に間違った内容がある場合や、より多くの情報を追加する必要がある場合は、お知らせください。あなたは見ることができますマイディスプレイマネージャ(まだ開発中)を例に挙げましょう。