#!/bin/sh

set -e

current_id=$(busctl get-property org.freedesktop.login1 /org/freedesktop/login1/session/self org.freedesktop.login1.Session Id | awk -F'"' '{print $2}')

session_id_list=$(loginctl list-sessions --no-legend | awk '{print $1}')
for id in $session_id_list; do
	if [ $current_id = $id ]; then
		# other sessions only
		continue;
	fi

	if [[ $id == c* ]]; then
		# ignore all c sessions
		continue;
	fi

	session_path=$(busctl call org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager GetSession "s" $id | awk -F'"' '{print $2}')

	session_id=$(busctl get-property org.freedesktop.login1 $session_path org.freedesktop.login1.Session Id | awk -F'"' '{print $2}')
	session_name=$(busctl get-property org.freedesktop.login1 $session_path org.freedesktop.login1.Session Name | awk -F'"' '{print $2}')
	session_service=$(busctl get-property org.freedesktop.login1 $session_path org.freedesktop.login1.Session Service | awk -F'"' '{print $2}')
	session_timestamp=$(busctl get-property org.freedesktop.login1 $session_path org.freedesktop.login1.Session Timestamp | cut -d' ' -f2)
	session_is_remote=$(busctl get-property org.freedesktop.login1 $session_path org.freedesktop.login1.Session Remote | cut -d' ' -f2)
	if $session_is_remote; then
		session_remote_host=$(busctl get-property org.freedesktop.login1 $session_path org.freedesktop.login1.Session RemoteHost | awk -F'"' '{print $2}')
	fi

	if $session_is_remote; then
		echo $session_id $session_name $session_service@$session_remote_host $session_timestamp
	else
		echo $session_id $session_name $session_service $session_timestamp
	fi
done
