Added bauerbill to pacman unlock routine
[mirrors/Programs.git] / bash / zenman / zenman.bash
CommitLineData
21c4e167
H
1#!/bin/bash
2#BANNER#######################################
3echo -n '
4 ____ ____ __ _ _ _ __ __ _
5(__ )( __)( ( \( \/ ) / _\ ( ( \
6 / _/ ) _) / // \/ \/ \/ /
7(____)(____)\_)__)\_)(_/\_/\_/\_)__) v1.8
8
9 Zenity based frontend for pacman
10 <~Harvie (http://blog.harvie.cz)
11 2oo9
12
13';
14
15#HELP/FEATURES################################
16if [ "$1" == '--help' ]; then
17cat << END
18HELP/FEATURES:
19- note this script is not much secure since it uses gksu to execute user defined scripts
20 - this is not good idea for server, but it should be OK for personal workstation
21 - root rights can be obtained by gksu anyway
22 - to defeat this risk please do not use 'remember password' in gksu
23- zenman --help prints this help
24- when zenman started, kills last zenman runned by this user
25 - you can kill zenman by zenman --stop (click on tray icon or wait after this)
26 - last pid is stored in ~/.config/zenman/zenman.pid
27- shows splashscreen (can be disabled...)
28- shows tray icon for each state (on mouse over shows state)
29 - system is up to date
30 - refreshing pacman database
31 - updates available
32- shows notification when updates available and listing them
33 - optionally can notify also using speech output
34- clicking on icon will begin upgrade in new xterm
35 - this is disabled only when refreshing
36 - if pacman db is locked it will be automaticaly unlocked
37 - only if there is any pacman related process running
38 - if there is some pacman related operation, error message appears
39- auto refreshing of pacman db is disabled (somebody will want to use cron)
40- all settings are hardcoded to zenman (/usr/bin/zenman)
41 - all settings can be overrided
42 - system wide: /etc/zenman.conf
43 - single user only: ~/.config/zenman/zenman.conf
44 - you can also write your own translation to this files
45
46TODO:
47( Don't shy and get involved! ;o)
48- Bugtracking/Bugfixing
49- Port to another package managers
50 - apt-zen (apt-get)
51 - zenmerge (emerge)
52 - ipkg-zen (ipkg)
53 - etc...
54- Localization to your native language
55END
56exit;
57fi;
58
59#SETTINGS#####################################
60#main#############################
61 zenman_caption='ZenMan';
62 zenman_interval=$[10*60];
63 zenman_splash=true;
64zenman_autorefresh=false;
65 zenman_speech=true;
66 zenman_configdir=~/.config/zenman;
67 zenman_pid="$zenman_configdir/zenman.pid";
68 zenman_true_ico='/usr/share/icons/gnome/48x48/status/software-update-urgent.png'; #software-update-available.svg
69 zenman_false_ico='/usr/share/icons/gnome/48x48/emotes/face-cool.png';
70zenman_refresh_ico='/usr/share/icons/gnome/48x48/actions/view-refresh.png';
71
72#files/commands###################
73 gksu='gksu'; #gksu/gksudo/...
74 pacman='/usr/bin/pacman'; #want to use pacman-color, yaourt or powerpill instead?
75 xterm='/usr/bin/xterm'; #xterm/...
76 espeak='/usr/bin/espeak' #espeak (for spoken notification)
77 pacman_refresh='-Syuw'; # -Sy ?
78 pacman_upgrade='-Syu'; # -Syuf ?
79 pacman_check='-Qu';
80 pacman_lock='/var/lib/pacman/db.lck'; #file to delete, when pacman locked (only if not running)
81
82#Translate here###################
83 zenman_true='New package(s) found! ;-)\n\nPacman output follows:\n';
84 zenman_false='No packages to update. ;-(';
85 zenman_refreshing='Refreshing pacman database. ;-) Please wait...';
86 zenman_usage="[i] $0 --stop to kill zenman\n[i] $0 --help to show help\n"
87 zenman_upgrade="[*] ZenMan will now execute full system upgrade! ;-)\n\n'$pacman' '$pacman_upgrade'\n\n";
88 zenman_close='[*] Press [ENTER] to close window...';
89 zenman_config='[*] Loading configuration from: ';
90 zenman_done='[DONE]';
91 zenman_locked="ZenMan can't execute system upgrade! ;-(
92Please stop all pacman related applications and try again.";
93 zenman_start="ZenMan started! ;-)
94by: Harvie 2oo9
95For more informations please visit:
96http://blog.harvie.cz/";
97
98#voice
99 espeak_voice='en'; #see: espeak --voices
100 espeak_volume='200'; #0-200
101 speech_true='New packages found!';
102
103#INIT#########################################
104if [ "$2" != '' ]; then zenman_configdir="$2"; fi; #when called with --upgrade
105mkdir -p "$zenman_configdir"
106touch "$zenman_configdir/zenman.conf"
107#read configuration files (can contain localization also)...
108for i in\
109 '/etc/zenman.conf'\
110 "$zenman_configdir/zenman.conf"\
111; do
112 echo "$zenman_config" "$i";
113 source "$i" >/dev/null 2>&1;
114done;
115if [ "$2" != '' ]; then zenman_configdir="$2"; fi; #when called with --upgrade
116
117#fallback icons
118 if [ ! -e "$zenman_true_ico" ]; then zenman_true_ico='warning'; fi;
119 if [ ! -e "$zenman_false_ico" ]; then zenman_false_ico='info'; fi;
120if [ ! -e "$zenman_refresh_ico" ]; then zenman_false_ico='question'; fi;
121
122
123#CODE#########################################
124#pid
125if [ -e "$zenman_pid" ]; then
126 kill $(cat "$zenman_pid") >/dev/null 2>&1;
127 kill -KILL $(cat "$zenman_pid") >/dev/null 2>&1;
128fi;
129if [ "$1" == '--stop' ]; then
130 echo '[!] exit';
131 exit;
132fi;
133echo "$$" > "$zenman_pid";
134
135#this procedure is called internally...
136if [ "$1" == '--upgrade' ]; then
137 echo -ne "$zenman_upgrade";
138 "$pacman" $pacman_upgrade;
139 if [ $? != 0 ]; then
140 echo -e "\n$zenman_close";
141 read;
142 else
143 sleep 2;
144 fi;
145 exit;
146fi;
147
148#splash
149echo -e "$zenman_usage"
150if "$zenman_splash"; then
151 notify-send -i info --expire-time=5000 "$zenman_caption" "$zenman_start";
152fi;
153
154
155#text-to-speech
156zenman_speech() {
157 if "$zenman_speech" && [[ -x "$espeak" ]] ; then
158 "$espeak" -a "$espeak_volume" -v "$espeak_voice" "$1" &
159 fi;
160}
161
162#unlocker
163zenman_force_unlock() {
164 if [ -e "$pacman_lock" ]; then #check if db locked...
63d9ffb6 165 ps -eo comm | grep -Ei '^(pacman|yaourt|powerpill|bauerbill|gtkpacman|pacupdate|kpacupdate|guzuta|YAPG|Shaman)' >/dev/null; #check if pacman is running...
21c4e167
H
166 if [ $? != 0 ]; then
167 "$gksu" "rm -rf '$pacman_lock'";
168 if [ $? != 0 ]; then
169 return 1; #gksu failed ;-(
170 else
171 return 0; #unlocked!!!
172 fi;
173 else
174 return 1; #pacman is running ;-(
175 fi;
176 else
177 return 0; #no locked!!!
178 fi;
179}
180
181
182while true; do
183 #uncomment next line if not running -Syuw from cron (and you better set higher zenman_interval)
184 if "$zenman_autorefresh"; then
185 echo -ne "$zenman_refreshing ";
186 zenity --notification --text "$zenman_refreshing" --window-icon="$zenman_refresh_ico" &
187 zenman_force_unlock;
188 "$gksu" "'$pacman' $pacman_refresh --noconfirm" >/dev/null 2>&1
189 kill $! >/dev/null 2>&1;
190 kill -KILL $! >/dev/null 2>&1;
191 echo "$zenman_done";
192 fi;
193 #check for new packages
194 pacman_new_packages=$("$pacman" $pacman_check --noconfirm 2>&1);
195 if [ $? == 0 ] && [ "$pacman_new_packages" != '' ]; then #fixed pacman always returning 0 issue...
196 #new packages found
197 zenman_speech "$speech_true";
198 notify-send -i info "$zenman_caption" "$(echo -e "$zenman_true" "$pacman_new_packages")"
199 zenity --notification --timeout="$zenman_interval" --text "$(echo -e "$zenman_true" "$pacman_new_packages")" --window-icon="$zenman_true_ico";
200 else
201 #no packages to update
202 zenity --notification --timeout="$zenman_interval" --text "$zenman_false" --window-icon="$zenman_false_ico";
203 fi;
204
205 #run full system upgrade if notification icon clicked
206 if [ $? == 0 ]; then
207 #try to unlock pacman db if locked and pacman is not running
208 zenman_force_unlock;
209 if [ $? == 0 ]; then
210 #update if unlocked
211 "$gksu" " '$xterm' -T '$zenman_caption' -e '$0 --upgrade \\\\'$zenman_configdir\\\\\''" ###TODO: fix quotes and escaping for configdir here later!!!!
212 zenman_force_unlock;
213 else
214 #show error if locked
215 notify-send -i error "$zenman_caption" "$zenman_locked";
216 fi;
217 fi;
218done;
This page took 0.243801 seconds and 4 git commands to generate.