OLD | NEW |
1 #!/bin/sh | 1 #!/bin/sh |
2 #--------------------------------------------- | 2 #--------------------------------------------- |
3 # xdg-screensaver | 3 # xdg-screensaver |
4 # | 4 # |
5 # Utility script to control screensaver. | 5 # Utility script to control screensaver. |
6 # | 6 # |
7 # Refer to the usage() function below for usage. | 7 # Refer to the usage() function below for usage. |
8 # | 8 # |
9 # Copyright 2006, Bryce Harrington <bryce@osdl.org> | 9 # Copyright 2006, Bryce Harrington <bryce@osdl.org> |
10 # | 10 # |
11 # LICENSE: | 11 # LICENSE: |
12 # | 12 # |
13 #--------------------------------------------- | 13 #--------------------------------------------- |
14 | 14 |
15 manualpage() | 15 manualpage() |
16 { | 16 { |
17 cat << _MANUALPAGE | 17 cat << _MANUALPAGE |
18 _MANUALPAGE | 18 _MANUALPAGE |
19 } | 19 } |
20 | 20 |
21 usage() | 21 usage() |
22 { | 22 { |
23 cat << _USAGE | 23 cat << _USAGE |
24 _USAGE | 24 _USAGE |
25 } | 25 } |
26 | 26 |
27 #@xdg-utils-common@ | 27 #@xdg-utils-common@ |
28 | 28 |
29 # Check if we can use "mv -T" | 29 # Check if we can use "mv -T" |
30 if mv -T ... ... 2>&1 | grep '\.\.\.' > /dev/null ; then | 30 if mv -T ... ... 2>&1 | grep '\.\.\.' > /dev/null ; then |
31 # We can securely move files in /tmp with mv -T | 31 # We can securely move files in /tmp with mv -T |
32 DEBUG 1 "mv -T available" | 32 DEBUG 1 "mv -T available" |
33 MV="mv -T" | 33 MV="mv -T" |
34 screensaver_file="/tmp/xdg-screensaver-$USER-"`echo $DISPLAY | sed 's/:/-/g'` | 34 screensaver_file="/tmp/xdg-screensaver-$USER-"`echo $DISPLAY | sed 's/:/-/g'` |
35 else | 35 else |
36 # No secure moves available, use home dir | 36 # No secure moves available, use home dir |
37 DEBUG 1 "mv -T not available" | 37 DEBUG 1 "mv -T not available" |
38 MV="mv" | 38 MV="mv" |
39 screensaver_file="$HOME/.xdg-screensaver-"`echo $(hostname)-$DISPLAY | sed 's
/:/-/g'` | 39 screensaver_file="$HOME/.xdg-screensaver-"`echo $(hostname)-$DISPLAY | sed 's
/:/-/g'` |
40 fi | 40 fi |
41 lockfile_command=`which lockfile 2> /dev/null` | 41 lockfile_command=`which lockfile 2> /dev/null` |
42 | 42 |
43 lockfile() | 43 lockfile() |
44 { | 44 { |
45 if [ -n "$lockfile_command" ] ; then | 45 if [ -n "$lockfile_command" ] ; then |
46 $lockfile_command -1 -l 10 -s 3 "$screensaver_file".lock | 46 $lockfile_command -1 -l 10 -s 3 "$screensaver_file".lock |
47 else | 47 else |
48 # Poor man's attempt at doing a lockfile | 48 # Poor man's attempt at doing a lockfile |
49 # Be careful not to facilitate a symlink attack | 49 # Be careful not to facilitate a symlink attack |
50 local try | 50 local try |
51 try=0 | 51 try=0 |
52 while ! ln -s "$screensaver_file".lock "$screensaver_file".lock 2> /dev/nul
l; | 52 while ! ln -s "$screensaver_file".lock "$screensaver_file".lock 2> /dev/nul
l; |
53 do | 53 do |
54 sleep 1 | 54 sleep 1 |
55 try=$(($try+1)) | 55 try=$(($try+1)) |
56 if [ $try -eq 3 ] ; then | 56 if [ $try -eq 3 ] ; then |
57 rm -f "$screensaver_file".lock || return # Can't remove lockfile | 57 rm -f "$screensaver_file".lock || return # Can't remove lockfile |
58 try=0 | 58 try=0 |
59 fi | 59 fi |
60 done | 60 done |
61 fi | 61 fi |
62 } | 62 } |
63 | 63 |
64 unlockfile() | 64 unlockfile() |
65 { | 65 { |
66 rm -f "$screensaver_file".lock | 66 rm -f "$screensaver_file".lock |
(...skipping 12 matching lines...) Expand all Loading... |
79 fi | 79 fi |
80 fi | 80 fi |
81 if [ "$1" = "reset" ] ; then | 81 if [ "$1" = "reset" ] ; then |
82 if xset -q | grep 'DPMS is Enabled' > /dev/null 2> /dev/null; then | 82 if xset -q | grep 'DPMS is Enabled' > /dev/null 2> /dev/null; then |
83 xset dpms force on | 83 xset dpms force on |
84 fi | 84 fi |
85 fi | 85 fi |
86 | 86 |
87 case "$DE" in | 87 case "$DE" in |
88 kde) | 88 kde) |
89 screensaver_kde "$1" | 89 if [ x"$KDE_SESSION_VERSION" = x"4" ]; then |
| 90 screensaver_freedesktop "$1" |
| 91 else |
| 92 screensaver_kde "$1" |
| 93 fi |
90 ;; | 94 ;; |
91 | 95 |
92 gnome) | 96 gnome_screensaver) |
93 screensaver_gnome "$1" | 97 screensaver_gnome_screensaver "$1" |
94 ;; | 98 ;; |
95 | 99 |
96 xscreensaver) | 100 xscreensaver) |
97 screensaver_xscreensaver "$1" | 101 screensaver_xscreensaver "$1" |
98 ;; | 102 ;; |
99 esac | 103 esac |
100 | 104 |
101 if [ "$1" = "suspend" ] ; then | 105 if [ "$1" = "suspend" ] ; then |
102 # Save DPMS state | 106 # Save DPMS state |
103 if xset -q | grep 'DPMS is Enabled' > /dev/null 2> /dev/null; then | 107 if xset -q | grep 'DPMS is Enabled' > /dev/null 2> /dev/null; then |
(...skipping 21 matching lines...) Expand all Loading... |
125 perform_action resume | 129 perform_action resume |
126 else | 130 else |
127 unlockfile | 131 unlockfile |
128 fi | 132 fi |
129 } | 133 } |
130 | 134 |
131 do_resume() | 135 do_resume() |
132 { | 136 { |
133 lockfile # Obtain lockfile | 137 lockfile # Obtain lockfile |
134 # Find the PID of the trackingprocess | 138 # Find the PID of the trackingprocess |
135 xprop_pid=`grep "$window_id:" "$screensaver_file" 2> /dev/null | cut -d ':' -f
2` | 139 xprop_pid=`grep "$window_id:" "$screensaver_file" 2> /dev/null | cut -d ':' -f
2` |
136 unlockfile # Free lockfile | 140 unlockfile # Free lockfile |
137 if [ -n "$xprop_pid" ] && ps -p "$xprop_pid" 2> /dev/null | grep xprop > /dev/
null; then | 141 if [ -n "$xprop_pid" ] && ps -p "$xprop_pid" 2> /dev/null | grep xprop > /dev/
null; then |
138 # Kill the tracking process | 142 # Kill the tracking process |
139 kill -s TERM $xprop_pid | 143 kill -s TERM $xprop_pid |
140 fi | 144 fi |
141 cleanup_suspend | 145 cleanup_suspend |
142 } | 146 } |
143 | 147 |
144 XPROP=`which xprop 2> /dev/null` | 148 XPROP=`which xprop 2> /dev/null` |
145 | 149 |
146 check_window_id() | 150 check_window_id() |
147 { | 151 { |
148 if [ -z "$XPROP" ]; then | 152 if [ -z "$XPROP" ]; then |
149 DEBUG 3 "xprop not found" | 153 DEBUG 3 "xprop not found" |
150 return | 154 return |
151 fi | 155 fi |
152 DEBUG 2 "Running $XPROP -id $window_id" | 156 DEBUG 2 "Running $XPROP -id $window_id" |
153 if $XPROP -id $window_id > /dev/null 2> /dev/null; then | 157 if $XPROP -id $window_id > /dev/null 2> /dev/null; then |
154 DEBUG 3 Window $window_id exists | 158 DEBUG 3 Window $window_id exists |
155 else | 159 else |
156 DEBUG 3 Window $window_id does not exist | 160 DEBUG 3 Window $window_id does not exist |
157 exit_failure_operation_failed "Window $window_id does not exist" | 161 exit_failure_operation_failed "Window $window_id does not exist" |
158 fi | 162 fi |
159 } | 163 } |
160 | 164 |
161 track_window() | 165 track_window() |
(...skipping 10 matching lines...) Expand all Loading... |
172 # Return if $window_id is being tracked already | 176 # Return if $window_id is being tracked already |
173 ( | 177 ( |
174 already_tracked=1 | 178 already_tracked=1 |
175 IFS_save="$IFS" | 179 IFS_save="$IFS" |
176 IFS=":" | 180 IFS=":" |
177 while read wid pid; do | 181 while read wid pid; do |
178 if ps -p "$pid" 2> /dev/null | grep xprop > /dev/null; then | 182 if ps -p "$pid" 2> /dev/null | grep xprop > /dev/null; then |
179 echo "$wid:$pid" | 183 echo "$wid:$pid" |
180 if [ $wid = $window_id ] ; then | 184 if [ $wid = $window_id ] ; then |
181 already_tracked=0 | 185 already_tracked=0 |
182 fi | 186 fi |
183 fi | 187 fi |
184 done | 188 done |
185 IFS="$IFS_save" | 189 IFS="$IFS_save" |
186 exit $already_tracked | 190 exit $already_tracked |
187 ) < $screensaver_file > $tmpfile | 191 ) < $screensaver_file > $tmpfile |
188 already_tracked=$? | 192 already_tracked=$? |
189 | 193 |
190 if [ "$already_tracked" -eq "0" ] ; then | 194 if [ "$already_tracked" -eq "0" ] ; then |
191 $MV "$tmpfile" "$screensaver_file" | 195 $MV "$tmpfile" "$screensaver_file" |
192 # We are already tracking $window_id, don't do anything | 196 # We are already tracking $window_id, don't do anything |
(...skipping 11 matching lines...) Expand all Loading... |
204 # Wait for xprop to edit, it means that the window disappeared | 208 # Wait for xprop to edit, it means that the window disappeared |
205 wait $xprop_pid | 209 wait $xprop_pid |
206 # Clean up the administration and resume the screensaver | 210 # Clean up the administration and resume the screensaver |
207 cleanup_suspend | 211 cleanup_suspend |
208 } | 212 } |
209 | 213 |
210 screensaver_freedesktop() | 214 screensaver_freedesktop() |
211 { | 215 { |
212 case "$1" in | 216 case "$1" in |
213 suspend) | 217 suspend) |
214 #FIXME (get/store cookie) | 218 dbus-send --session \ |
215 qdbus org.freedesktop.ScreenSaver /ScreenSaver org.freedesktop.ScreenSav
er.Inhibit $window_id xdg-screensaver > /dev/null | 219 --dest=org.freedesktop.ScreenSaver \ |
| 220 --type=method_call \ |
| 221 --print-reply \ |
| 222 --reply-timeout=2000 \ |
| 223 /ScreenSaver \ |
| 224 org.freedesktop.ScreenSaver.Inhibit \ |
| 225 string:$window_id \ |
| 226 string:xdg-screensaver \ |
| 227 | grep uint32 | cut -d ' ' -f 5 >| "$screensaver_file.cookie"
\ |
| 228 2> /dev/null |
216 result=$? | 229 result=$? |
217 ;; | 230 ;; |
218 | 231 |
219 resume) | 232 resume) |
220 qdbus org.freedesktop.ScreenSaver /ScreenSaver org.freedesktop.ScreenSav
er.SetActive true > /dev/null | 233 if [ -f "$screensaver_file.cookie" ] ; then |
| 234 value=`cat "$screensaver_file.cookie"` |
| 235 dbus-send --session \ |
| 236 --dest=org.freedesktop.ScreenSaver \ |
| 237 --type=method_call \ |
| 238 /ScreenSaver \ |
| 239 org.freedesktop.ScreenSaver.UnInhibit \ |
| 240 uint32:$value \ |
| 241 2> /dev/null |
| 242 rm -f "$screensaver_file.cookie" |
| 243 fi |
221 result=$? | 244 result=$? |
222 ;; | 245 ;; |
223 | 246 |
224 activate) | 247 activate) |
225 qdbus org.freedesktop.ScreenSaver /ScreenSaver org.freedesktop.ScreenSav
er.SetActive true > /dev/null | 248 dbus-send --session \ |
| 249 --dest=org.freedesktop.ScreenSaver \ |
| 250 --type=method_call \ |
| 251 /ScreenSaver \ |
| 252 org.freedesktop.ScreenSaver.SetActive \ |
| 253 boolean:true \ |
| 254 2> /dev/null |
226 result=$? | 255 result=$? |
227 ;; | 256 ;; |
228 | 257 |
229 lock) | 258 lock) |
230 qdbus org.freedesktop.ScreenSaver /ScreenSaver org.freedesktop.ScreenSav
er.Lock > /dev/null | 259 dbus-send --session \ |
| 260 --dest=org.freedesktop.ScreenSaver \ |
| 261 --type=method_call \ |
| 262 /ScreenSaver \ |
| 263 org.freedesktop.ScreenSaver.Lock \ |
| 264 2> /dev/null |
231 ;; | 265 ;; |
232 | 266 |
233 reset) | 267 reset) |
234 #FIXME (cookies?) | 268 if [ -f "$screensaver_file.cookie" ] ; then |
235 qdbus org.freedesktop.ScreenSaver /ScreenSaver org.freedesktop.ScreenSav
er.UnInhibit $window_id > /dev/null | 269 value=`cat "$screensaver_file.cookie"` |
| 270 dbus-send --session \ |
| 271 --dest=org.freedesktop.ScreenSaver \ |
| 272 --type=method_call \ |
| 273 /ScreenSaver \ |
| 274 org.freedesktop.ScreenSaver.UnInhibit \ |
| 275 uint32:$value \ |
| 276 2> /dev/null |
| 277 rm -f "$screensaver_file.cookie" |
| 278 fi |
236 result=$? | 279 result=$? |
237 ;; | 280 ;; |
238 | 281 |
239 status) | 282 status) |
240 status=`qdbus org.freedesktop.ScreenSaver /ScreenSaver org.freedesktop.S
creenSaver.GetActive` | 283 status=`dbus-send --session \ |
| 284 --dest=org.freedesktop.ScreenSaver \ |
| 285 --type=method_call \ |
| 286 --print-reply \ |
| 287 --reply-timeout=2000 \ |
| 288 /ScreenSaver \ |
| 289 org.freedesktop.ScreenSaver.GetActive \ |
| 290 | grep boolean | cut -d ' ' -f 5` |
241 result=$? | 291 result=$? |
242 if [ x"$status" = "xtrue" ]; then | 292 if [ x"$status" = "xtrue" ]; then |
243 echo "enabled" | 293 echo "enabled" |
244 elif [ x"$status" = "xfalse" ]; then | 294 elif [ x"$status" = "xfalse" ]; then |
245 echo "disabled" | 295 echo "disabled" |
246 else | 296 else |
247 echo "ERROR: dbus org.freedesktop.ScreenSaver.GetActive returned '$s
tatus'" >&2 | 297 echo "ERROR: dbus org.freedesktop.ScreenSaver.GetActive returned '$s
tatus'" >&2 |
248 return 1 | 298 return 1 |
249 fi | 299 fi |
250 ;; | 300 ;; |
251 | 301 |
252 *) | 302 *) |
253 echo "ERROR: Unknown command '$1'" >&2 | 303 echo "ERROR: Unknown command '$1'" >&2 |
254 return 1 | 304 return 1 |
255 ;; | 305 ;; |
256 esac | 306 esac |
257 } | 307 } |
258 | 308 |
259 screensaver_kde() | 309 screensaver_kde() |
260 { | 310 { |
261 case "$1" in | 311 case "$1" in |
262 suspend) | 312 suspend) |
263 dcop kdesktop KScreensaverIface enable false > /dev/null | 313 dcop kdesktop KScreensaverIface enable false > /dev/null |
264 result=$? | 314 result=$? |
265 ;; | 315 ;; |
266 | 316 |
267 resume) | 317 resume) |
268 dcop kdesktop KScreensaverIface configure > /dev/null | 318 dcop kdesktop KScreensaverIface configure > /dev/null |
269 result=$? | 319 result=$? |
270 ;; | 320 ;; |
271 | 321 |
272 activate) | 322 activate) |
273 dcop kdesktop KScreensaverIface save > /dev/null | 323 dcop kdesktop KScreensaverIface save > /dev/null |
274 result=$? | 324 result=$? |
275 ;; | 325 ;; |
276 | 326 |
277 lock) | 327 lock) |
278 dcop kdesktop KScreensaverIface lock > /dev/null | 328 dcop kdesktop KScreensaverIface lock > /dev/null |
279 result=$? | 329 result=$? |
280 ;; | 330 ;; |
281 | 331 |
282 reset) | 332 reset) |
283 # Turns the screensaver off right now | 333 # Turns the screensaver off right now |
284 dcop kdesktop KScreensaverIface quit > /dev/null | 334 dcop kdesktop KScreensaverIface quit > /dev/null |
285 result=$? | 335 result=$? |
286 ;; | 336 ;; |
287 | 337 |
288 status) | 338 status) |
289 status=`dcop kdesktop KScreensaverIface isEnabled` | 339 status=`dcop kdesktop KScreensaverIface isEnabled` |
290 result=$? | 340 result=$? |
291 if [ x"$status" = "xtrue" ]; then | 341 if [ x"$status" = "xtrue" ]; then |
(...skipping 26 matching lines...) Expand all Loading... |
318 if ps -p "$pid" 2> /dev/null | grep xprop > /dev/null; then | 368 if ps -p "$pid" 2> /dev/null | grep xprop > /dev/null; then |
319 echo "$wid:$pid" | 369 echo "$wid:$pid" |
320 fi | 370 fi |
321 done | 371 done |
322 IFS="$IFS_save" | 372 IFS="$IFS_save" |
323 ) > $tmpfile | 373 ) > $tmpfile |
324 if [ -s "$tmpfile" ] ; then | 374 if [ -s "$tmpfile" ] ; then |
325 # Suspend pending, don't do a thing | 375 # Suspend pending, don't do a thing |
326 $MV "$tmpfile" "$screensaver_file" | 376 $MV "$tmpfile" "$screensaver_file" |
327 unlockfile | 377 unlockfile |
328 return | 378 return |
329 fi | 379 fi |
330 $MV "$tmpfile" "$screensaver_file" | 380 $MV "$tmpfile" "$screensaver_file" |
331 unlockfile | 381 unlockfile |
332 (while [ -f "$screensaver_file" ]; do $*; sleep 50; done) > /dev/null 2> /dev/
null & | 382 (while [ -f "$screensaver_file" ]; do $*; sleep 50; done) > /dev/null 2> /dev/
null & |
333 } | 383 } |
334 | 384 |
335 screensaver_gnome() | 385 screensaver_gnome_screensaver() |
336 { | 386 { |
337 # TODO | 387 # TODO |
338 # There seems to be a DBUS interface for gnome-screensaver | 388 # There seems to be a DBUS interface for gnome-screensaver |
339 # See http://lists.mplayerhq.hu/pipermail/mplayer-dev-eng/2006-April/042579.html
and | 389 # See http://lists.mplayerhq.hu/pipermail/mplayer-dev-eng/2006-April/042579.html
and |
340 # http://cvs.gnome.org/viewcvs/gnome-screensaver/src/gs-listener-dbus.c?rev=1.36
&view=log | 390 # http://cvs.gnome.org/viewcvs/gnome-screensaver/src/gs-listener-dbus.c?rev=1.36
&view=log |
341 # A problem seems to be that Inhibit is tied to the lifetime of the DBUS appname
and | 391 # A problem seems to be that Inhibit is tied to the lifetime of the DBUS appname
and |
342 # this can not be used from a script | 392 # this can not be used from a script |
343 case "$1" in | 393 case "$1" in |
344 suspend) | 394 suspend) |
345 screensaver_suspend_loop gnome-screensaver-command --poke | 395 screensaver_suspend_loop gnome-screensaver-command --poke |
346 result=0 | 396 result=0 |
347 ;; | 397 ;; |
348 | 398 |
349 resume) | 399 resume) |
350 # Automatic resume when $screensaver_file disappears | 400 # Automatic resume when $screensaver_file disappears |
351 result=0 | 401 result=0 |
352 ;; | 402 ;; |
353 | 403 |
354 activate) | 404 activate) |
355 gnome-screensaver-command --activate > /dev/null 2> /dev/null | 405 gnome-screensaver-command --activate > /dev/null 2> /dev/null |
356 result=$? | 406 result=$? |
357 ;; | 407 ;; |
358 | 408 |
359 lock) | 409 lock) |
360 gnome-screensaver-command --lock > /dev/null 2> /dev/null | 410 gnome-screensaver-command --lock > /dev/null 2> /dev/null |
361 result=$? | 411 result=$? |
362 ;; | 412 ;; |
363 | 413 |
364 reset) | 414 reset) |
365 # Turns the screensaver off right now | 415 # Turns the screensaver off right now |
366 gnome-screensaver-command --deactivate > /dev/null 2> /dev/null | 416 gnome-screensaver-command --deactivate > /dev/null 2> /dev/null |
367 result=$? | 417 result=$? |
368 ;; | 418 ;; |
369 | 419 |
370 status) | 420 status) |
371 result=0 | 421 result=0 |
372 if [ -f "$screensaver_file" ] ; then | 422 if [ -f "$screensaver_file" ] ; then |
373 echo "disabled" | 423 echo "disabled" |
374 elif gnome-screensaver-command --query > /dev/null 2> /dev/null; then | 424 elif gnome-screensaver-command --query > /dev/null 2> /dev/null; then |
375 echo "enabled" | 425 echo "enabled" |
376 else | 426 else |
377 # Something is wrong | 427 # Something is wrong |
378 echo "disabled" | 428 echo "disabled" |
379 fi | 429 fi |
380 ;; | 430 ;; |
381 | 431 |
382 *) | 432 *) |
383 echo "ERROR: Unknown command '$1" >&2 | 433 echo "ERROR: Unknown command '$1" >&2 |
384 return 1 | 434 return 1 |
385 ;; | 435 ;; |
386 esac | 436 esac |
387 } | 437 } |
388 | 438 |
389 screensaver_xscreensaver() | 439 screensaver_xscreensaver() |
390 { | 440 { |
391 case "$1" in | 441 case "$1" in |
392 suspend) | 442 suspend) |
393 screensaver_suspend_loop xscreensaver-command -deactivate | 443 screensaver_suspend_loop xscreensaver-command -deactivate |
394 result=0 | 444 result=0 |
395 ;; | 445 ;; |
396 | 446 |
397 resume) | 447 resume) |
398 # Automatic resume when $screensaver_file disappears | 448 # Automatic resume when $screensaver_file disappears |
399 result=0 | 449 result=0 |
400 ;; | 450 ;; |
401 | 451 |
402 activate) | 452 activate) |
403 xscreensaver-command -activate > /dev/null 2> /dev/null | 453 xscreensaver-command -activate > /dev/null 2> /dev/null |
404 result=$? | 454 result=$? |
405 ;; | 455 ;; |
406 | 456 |
407 lock) | 457 lock) |
408 xscreensaver-command -lock > /dev/null 2> /dev/null | 458 xscreensaver-command -lock > /dev/null 2> /dev/null |
409 result=$? | 459 result=$? |
410 ;; | 460 ;; |
411 | 461 |
412 reset) | 462 reset) |
413 # Turns the screensaver off right now | 463 # Turns the screensaver off right now |
414 xscreensaver-command -deactivate > /dev/null 2> /dev/null | 464 xscreensaver-command -deactivate > /dev/null 2> /dev/null |
415 result=$? | 465 result=$? |
416 ;; | 466 ;; |
417 | 467 |
418 status) | 468 status) |
419 result=0 | 469 result=0 |
420 if [ -f "$screensaver_file" ] ; then | 470 if [ -f "$screensaver_file" ] ; then |
421 echo "disabled" | 471 echo "disabled" |
(...skipping 10 matching lines...) Expand all Loading... |
432 } | 482 } |
433 | 483 |
434 [ x"$1" != x"" ] || exit_failure_syntax | 484 [ x"$1" != x"" ] || exit_failure_syntax |
435 | 485 |
436 action= | 486 action= |
437 window_id= | 487 window_id= |
438 | 488 |
439 case $1 in | 489 case $1 in |
440 suspend) | 490 suspend) |
441 action="$1" | 491 action="$1" |
442 | 492 |
443 shift | 493 shift |
444 | 494 |
445 if [ -z "$1" ] ; then | 495 if [ -z "$1" ] ; then |
446 exit_failure_syntax "WindowID argument missing" | 496 exit_failure_syntax "WindowID argument missing" |
447 fi | 497 fi |
448 | 498 |
449 window_id="$1" | 499 window_id="$1" |
450 check_window_id | 500 check_window_id |
451 ;; | 501 ;; |
452 | 502 |
453 resume) | 503 resume) |
454 action="$1" | 504 action="$1" |
455 | 505 |
456 shift | 506 shift |
457 | 507 |
458 if [ -z "$1" ] ; then | 508 if [ -z "$1" ] ; then |
459 exit_failure_syntax "WindowID argument missing" | 509 exit_failure_syntax "WindowID argument missing" |
460 fi | 510 fi |
461 | 511 |
462 window_id="$1" | 512 window_id="$1" |
463 check_window_id | 513 check_window_id |
464 ;; | 514 ;; |
465 | 515 |
466 activate) | 516 activate) |
467 action="$1" | 517 action="$1" |
468 ;; | 518 ;; |
469 | 519 |
470 lock) | 520 lock) |
471 action="$1" | 521 action="$1" |
472 ;; | 522 ;; |
473 | 523 |
474 reset) | 524 reset) |
475 action="$1" | 525 action="$1" |
476 ;; | 526 ;; |
477 | 527 |
478 status) | 528 status) |
479 action="$1" | 529 action="$1" |
480 ;; | 530 ;; |
481 | 531 |
482 *) | 532 *) |
483 exit_failure_syntax "unknown command '$1'" | 533 exit_failure_syntax "unknown command '$1'" |
484 ;; | 534 ;; |
485 esac | 535 esac |
486 | 536 |
487 detectDE | 537 detectDE |
488 # Consider "xscreensaver" a separate DE | 538 # Consider "xscreensaver" a separate DE |
489 xscreensaver-command -version 2> /dev/null | grep XScreenSaver > /dev/null && DE
="xscreensaver" | 539 xscreensaver-command -version 2> /dev/null | grep XScreenSaver > /dev/null && DE
="xscreensaver" |
| 540 # Consider "gnome-screensaver" a separate DE |
| 541 gnome-screensaver-command -q > /dev/null 2>&1 && DE="gnome_screensaver" |
490 | 542 |
491 if [ "$action" = "resume" ] ; then | 543 if [ "$action" = "resume" ] ; then |
492 do_resume | 544 do_resume |
493 exit_success | 545 exit_success |
494 fi | 546 fi |
495 | 547 |
496 perform_action "$action" | 548 perform_action "$action" |
497 | 549 |
498 if [ "$action" = "suspend" ] ; then | 550 if [ "$action" = "suspend" ] ; then |
499 # Start tracking $window_id and resume the screensaver once it disappears | 551 # Start tracking $window_id and resume the screensaver once it disappears |
500 ( track_window ) 2> /dev/null > /dev/null & | 552 ( track_window ) 2> /dev/null > /dev/null & |
501 fi | 553 fi |
502 | 554 |
503 if [ $result -eq 0 ]; then | 555 if [ $result -eq 0 ]; then |
504 exit_success | 556 exit_success |
505 else | 557 else |
506 exit_failure_operation_failed | 558 exit_failure_operation_failed |
507 fi | 559 fi |
OLD | NEW |