aboutsummaryrefslogtreecommitdiff
path: root/alt/logout-manager-trayicon.sh
blob: 22cca5fd8cb0a0f623940431d79c8dee2fc574d5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#!/usr/bin/env sh
# File: logout-manager-trayicon.sh
# License: CC-BY-SA 4.0
# Author: bgstack15
# Startdate: 2020-03-19 13:34
# Title: Tray icon for logout-manager
# Purpose: To show a tray icon for logout options
# History:
#    Alternative version of a trayicon that depends on mktrayicon
# Usage:
# Reference:
#    keyboard-leds-trayicons
# Improve:
# Dependencies:
#    raw: mktrayicon, awk, xset
#    devuan: mktrayicon, mawk | gawk, x11-xserver-utils
# Documentation:
#    This script works just fine. I just want to learn how to do this in python, and have icons on the menu.

# CONFIG FILES
test -z "${LMT_GLOBAL_CONF}" && LMT_GLOBAL_CONF=/etc/logout-manager-trayicon.conf
test -z "${LMT_USER_CONF}" && LMT_USER_CONF="${HOME}/.config/logout-manager-trayicon.conf"
# also accept LMT_CONF

# FUNCTIONS

get_conf() {
   # Ripped from framework.sh
   # call: get_conf "${conffile}"
   local _infile="$1"
   local _tmpfile1="$( mktemp )"
   sed -e 's/^\s*//;s/\s*$//;/^[#$]/d;s/\s*[^\]#.*$//;' "${_infile}" | grep -viE "^$" | while read _line ;
   do
      local _left="$( echo "${_line}" | cut -d'=' -f1 )"
      eval "_thisval=\"\${${_left}}\""
      test -z "${_thisval}" && echo "${_line}" >> "${_tmpfile1}"
   done
   test -f "${_tmpfile1}" && { . "${_tmpfile1}" 1>/dev/null 2>&1 ; }
   /bin/rm -rf "${_tmpfile1}" 1>/dev/null 2>&1
}

clean_lmt() {
   { test -e "${lmicon}" && echo "q" > "${lmicon}" ; } 1>/dev/null 2>&1 &
}

# LOAD CONFIGS
# order is important! The last one called gets precedence.
# instead of simply dot-sourcing the conf file, pass it to get_conf which only applies new values, so this process's environment is preserved
for thisconf in "${LMT_GLOBAL_CONF}" "${LMT_USER_CONF}" "${LMT_CONF}" ;
do
   test -r "${thisconf}" && get_conf "${thisconf}"
done

# DEFAULTS in case configs did not have these values
test -z "${LMT_ICON}" && LMT_ICON=logout

# INITIALIZATION

lmicon="/var/run/user/$( id -u )/${$}.logout-manager.icon"

case "${1}" in
   "run-program")
      result="$( ps -eo 'pid,user,command:80' | grep -E 'logout-manager --from-[t]rayicon' | awk '{print $1}' )"
      if test -n "${result}"
      then
         kill "${result}"
      else
         /usr/bin/logout-manager --from-trayicon
      fi
      ;;
   *)
      test "ON" = "ON" && {
         mkfifo "${lmicon}"
         mktrayicon "${lmicon}" &
         echo "i ${LMT_ICON}" > "${lmicon}"
         echo "m lock,logout-manager-cli.py lock|logout,logout-manager-cli.py logout|hibernate,logout-manager-cli.py hibernate|shutdown,logout-manager-cli.py shutdown|reboot,logout-manager-cli.py reboot|-----|Logged in as ${USER}|hide tray icon,echo 'q' > ${lmicon} ; kill -10 $$ 1>/dev/null 2>&1" > "${lmicon}"
         echo "c $0 run-program" > "${lmicon}"
         echo "t ${DRYRUN:+DRYRUN MODE: }Logged in as $USER" > "${lmicon}"
      }
      ;;
esac

trap 'trap "" 2 10 ; clean_lmt'  2 10 # CTRL-C SIGUSR1
bgstack15