summaryrefslogtreecommitdiffstats
path: root/bin/xsession
blob: 67ea9a73deaae1813356349274ed124663d2fe86 (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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#!/bin/sh

set -eu

actions_icons='/usr/share/icons/gnome/16x16/actions'
awk_who='
	BEGIN {
		display_ere = " [(]" display "[)]$";
		printed = 0;
	}
	NR == 1 {
		headings = $0;
	}
	NR > 1 {
		if (!match($0, display_ere)) {
			if (!printed) {
				print("\n\nThe following sessions " \
					"will also be hung up:\n");
				print("<tt><small>    " headings \
					"</small></tt>");
				printed = 1;
			}
			print("<tt><small>    " $0 "</small></tt>");
		}
	}
	'

do_logout()
{
	zenity --no-wrap --question --title='Log Out' \
		--window-icon="${actions_icons}/system-log-out.png" \
		--text='Are you sure you want to log out?' \
		--ok-label='Log Out' --cancel-label='Cancel' && \
		printf 'quit\n' >~/.xsessionmanage

	return 0
}

do_shutdown()
{
	zenity --no-wrap --question --title='Shut Down' \
		--window-icon="${actions_icons}/system-shutdown.png" \
		--text="Are you sure you want to shut down this system?$(\
			who -H | awk -v "display=${DISPLAY}" "${awk_who}")" \
		--ok-label='Shut Down' --cancel-label='Cancel' && \
		sudo shutdown -hP now

	return 0
}

do_reboot()
{
	zenity --no-wrap --question --title='Reboot' \
		--window-icon="${actions_icons}/system-shutdown.png" \
		--text="Are you sure you want to reboot this system?$(\
			who -H | awk -v "display=${DISPLAY}" "${awk_who}")" \
		--ok-label='Reboot' --cancel-label='Cancel' && \
		sudo reboot

	return 0
}

do_s2mem()
{
	zenity --no-wrap --question --title='Suspend' \
		--window-icon="${actions_icons}/media-playback-pause.png" \
		--text='Are you sure you want to suspend this system?' \
		--ok-label='Suspend' --cancel-label='Cancel' && \
		sudo dd of='/sys/power/state' <<-EOF
			mem
			EOF

	return 0
}

do_s2disk()
{
	zenity --no-wrap --question --title='Hibernate' \
		--window-icon="${actions_icons}/media-playback-pause.png" \
		--text='Are you sure you want to hibernate this system?' \
		--ok-label='Hibernate' --cancel-label='Cancel' && \
		sudo dd of='/sys/power/state' <<-EOF
			disk
			EOF

	sleep 1
	xinput set-prop 'TPPS/2 IBM TrackPoint' 'Evdev Wheel Emulation' 1
	xinput set-prop 'TPPS/2 IBM TrackPoint' 'Evdev Wheel Emulation Button' 2
	xinput set-prop 'TPPS/2 IBM TrackPoint' \
		'Evdev Wheel Emulation Timeout' 200
	xinput set-prop 'TPPS/2 IBM TrackPoint' \
		'Evdev Wheel Emulation Axes' 6 7 4 5

	return 0
}

usage()
{
	printf 'Usage: %s {logout|shutdown|reboot|s2mem|s2disk}\n' "${0}"

	return 0
}

main()
{
	local action=

	if [ ${#} -ne 1 ]; then
		usage 1>&2
		return 1
	fi
	action="${1}"
	shift 1

	read -r DISPLAY 0<~/.xdisplay

	case "${action}" in
		'logout' | 'shutdown' | 'reboot' | 's2mem' | 's2disk')
			"do_${action}"
			;;
		*)
			usage 1>&2
			return 1
			;;
	esac

	return 0
}

main "${@}"