// Copyright (C) 2016-2017 Luke Shumaker // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // TODO package sd_login import ( "strings" ) // A SessionName represents a login session. type SessionName string func (name SessionName) isValid() bool { id := string(name) if id == "" { return false } return strings.TrimLeft(id, letters+digits) == "" } type SessionState int const ( // logged in, in background SessionOnline SessionState = iota // logged in, in foreground SessionActive // nominally logged out, but some processes belonging to it // are still around. SessionClosing ) func GetSessions() ([]SessionName, error) { strs, err := get_files_in_directory("/run/systemd/sessions/") if err != nil { return nil, err } sessions := make([]SessionName, len(strs)) for i := range strs { sessions[i] = SessionName(strs[i]) } return sessions, nil } func (sess SessionName) IsActive() (bool, error) func (sess SessionName) IsRemote() (bool, error) func (sess SessionName) GetState() (SessionState, error) func (sess SessionName) GetUser() (UserID, error) func (sess SessionName) GetSeat() (SeatName, error) // PAM func (sess SessionName) GetService() (string, error) // tty, x11, wayland, mir, unspecified func (sess SessionName) GetType() (string, error) // user, greeter, lock-screen func (sess SessionName) GetClass() (string, error) // GNOME, KDE, systemd-console func (sess SessionName) GetDesktop() (string, error) // X11 DISPLAY func (sess SessionName) GetDisplay() (string, error) func (sess SessionName) GetRemoteHost() (string, error) // PAM func (sess SessionName) GetRemoteUser() (string, error) func (sess SessionName) GetTTY() (string, error) func (sess SessionName) GetVT() (uint, error)