グラフィカルLinuxデスクトップセッションで現在アクティブなユーザー/セッションを返す方法は? [閉鎖]

グラフィカルLinuxデスクトップセッションで現在アクティブなユーザー/セッションを返す方法は? [閉鎖]

私の質問は、現在Linuxデスクトップを使用しているシェルからユーザー名を取得する方法です(「一般」デスクトップシステムでは通常、アクティブなユーザーは1人しかいません。つまり、サーバーシステムはなく、一般的なノートブックのみです)。本当にサーバーシステムを想像したい場合は、すべてを一覧表示できます。ポジティブユーザー。

したがって、cronジョブ(または同様のジョブ)でrootとして実行されるスクリプトの場合は、システムの現在/すべてのアクティブユーザーをインポートしたいと思います。

現在ログインしているユーザーを使用またはインポートできることwを知っています。大丈夫です。しかし、ユーザーがログインしても実際に現在ログインしているという意味ではありません。whousers使用デスクトップ、私が知っているすべてのデスクトップ環境では、ユーザーはログイン後に他のユーザーに切り替えることができるからです。
また、これを使用して最後にログインしたユーザーをインポートすることもできますがlast、これはまだアクティブなユーザーであることを保証しません。

ではどうすればいいですか?さまざまなデスクトップ環境(GNOME、KDEなど)に特定のソリューションを持つことは大丈夫ですが、もちろん、互換性のあるソリューションが好まれます。

ベストアンサー1

現在、多くの展開では、ログインセッション(グラフィックスと非グラフィックス)は次のようにlogindセッションを一覧表示できます。

loginctl list-sessions

次に、次を使用して各セッションのプロパティを表示します。

loginctl show-session ${SESSIONID}

または

loginctl session-status ${SESSIONID}

${SESSIONID}適切に交換) 2つのバリエーションの違いは、簡単に解析できるように設計されており、show-sessionsession-statusが消費できるように設計されていることです。アクティブセッションは状態として識別され、クエリを直接使用できます。

loginctl show-session -p State ${SESSIONID}

これは出力されます

State=active

アクティブセッションの場合。フルshow-session出力は、どのユーザーが接続されているのか、どのTTYが使用されているのか、リモートセッションなのか、グラフィカルなセッションなのかなどを伝えます。

logindシステムがマルチシートで構成されている場合、またはリモートセッションが存在する場合は、マルチアクティブセッションがある可能性があります。

一緒に集めて、

for sessionid in $(loginctl list-sessions --no-legend | awk '{ print $1 }')
do loginctl show-session -p Id -p Name -p User -p State -p Type -p Remote $sessionid
done

どのセッションがアクティブで、誰が使用しているかを確認するために必要なすべての情報を提供します。

for sessionid in $(loginctl list-sessions --no-legend | awk '{ print $1 }')
do loginctl show-session -p Id -p Name -p User -p State -p Type -p Remote $sessionid | sort
done |
awk -F= '/Name/ { name = $2 } /User/ { user = $2 } /State/ { state = $2 } /Type/ { type = $2 } /Remote/ { remote = $2 } /User/ && remote == "no" && state == "active" && (type == "x11" || type == "wayland") { print user, name }'

すべてのアクティブユーザーの識別子とログイン情報は、グラフィカルセッションを通じて印刷されます。

このプロパティLockedHintは、指定されたセッションがロックされているかどうかを示します。

for sessionid in $(loginctl list-sessions --no-legend | awk '{ print $1 }')
do loginctl show-session -p Id -p Name -p User -p State -p Type -p Remote -p LockedHint $sessionid | sort
done |
awk -F= '/Name/ { name = $2 } /User/ { user = $2 } /State/ { state = $2 } /Type/ { type = $2 } /Remote/ { remote = $2 } /LockedHint/ { locked = $2 } /User/ && remote == "no" && state == "active" && (type == "x11" || type == "wayland") { print user, name, locked == "yes" ? "locked" : "unlocked" }'

また、アクティブセッションがロックされているかどうかを示します。

おすすめ記事