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 # |
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
223 exit_failure_file_permission_read() | 223 exit_failure_file_permission_read() |
224 { | 224 { |
225 if [ $# -gt 0 ]; then | 225 if [ $# -gt 0 ]; then |
226 echo "xdg-screensaver: $@" >&2 | 226 echo "xdg-screensaver: $@" >&2 |
227 fi | 227 fi |
228 | 228 |
229 exit 5 | 229 exit 5 |
230 } | 230 } |
231 | 231 |
232 #------------------------------------------------------------ | 232 #------------------------------------------------------------ |
233 # Exit script on insufficient permission to read a specified file | 233 # Exit script on insufficient permission to write a specified file |
234 | 234 |
235 exit_failure_file_permission_write() | 235 exit_failure_file_permission_write() |
236 { | 236 { |
237 if [ $# -gt 0 ]; then | 237 if [ $# -gt 0 ]; then |
238 echo "xdg-screensaver: $@" >&2 | 238 echo "xdg-screensaver: $@" >&2 |
239 fi | 239 fi |
240 | 240 |
241 exit 6 | 241 exit 6 |
242 } | 242 } |
243 | 243 |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
300 echo "Use 'man xdg-screensaver' or 'xdg-screensaver --manual' for ad
ditional info." | 300 echo "Use 'man xdg-screensaver' or 'xdg-screensaver --manual' for ad
ditional info." |
301 exit_success | 301 exit_success |
302 ;; | 302 ;; |
303 | 303 |
304 --manual) | 304 --manual) |
305 manualpage | 305 manualpage |
306 exit_success | 306 exit_success |
307 ;; | 307 ;; |
308 | 308 |
309 --version) | 309 --version) |
310 echo "xdg-screensaver 1.0.1" | 310 echo "xdg-screensaver 1.0.2" |
311 exit_success | 311 exit_success |
312 ;; | 312 ;; |
313 esac | 313 esac |
314 done | 314 done |
315 } | 315 } |
316 | 316 |
317 check_common_commands "$@" | 317 check_common_commands "$@" |
318 | 318 |
319 [ -z "${XDG_UTILS_DEBUG_LEVEL}" ] && unset XDG_UTILS_DEBUG_LEVEL; | 319 [ -z "${XDG_UTILS_DEBUG_LEVEL}" ] && unset XDG_UTILS_DEBUG_LEVEL; |
320 if [ ${XDG_UTILS_DEBUG_LEVEL-0} -lt 1 ]; then | 320 if [ ${XDG_UTILS_DEBUG_LEVEL-0} -lt 1 ]; then |
321 # Be silent | 321 # Be silent |
322 xdg_redirect_output=" > /dev/null 2> /dev/null" | 322 xdg_redirect_output=" > /dev/null 2> /dev/null" |
323 else | 323 else |
324 # All output to stderr | 324 # All output to stderr |
325 xdg_redirect_output=" >&2" | 325 xdg_redirect_output=" >&2" |
326 fi | 326 fi |
327 | 327 |
328 #-------------------------------------- | 328 #-------------------------------------- |
329 # Checks for known desktop environments | 329 # Checks for known desktop environments |
330 # set variable DE to the desktop environments name, lowercase | 330 # set variable DE to the desktop environments name, lowercase |
331 | 331 |
332 detectDE() | 332 detectDE() |
333 { | 333 { |
334 if [ x"$KDE_FULL_SESSION" = x"true" ]; then DE=kde; | 334 if [ x"$KDE_FULL_SESSION" = x"true" ]; then DE=kde; |
335 elif [ x"$GNOME_DESKTOP_SESSION_ID" != x"" ]; then DE=gnome; | 335 elif [ x"$GNOME_DESKTOP_SESSION_ID" != x"" ]; then DE=gnome; |
336 elif xprop -root _DT_SAVE_MODE | grep ' = \"xfce4\"$' >/dev/null 2>&1; then
DE=xfce; | 336 elif `dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/D
Bus org.freedesktop.DBus.GetNameOwner string:org.gnome.SessionManager > /dev/nul
l 2>&1` ; then DE=gnome; |
| 337 elif xprop -root _DT_SAVE_MODE 2> /dev/null | grep ' = \"xfce4\"$' >/dev/nul
l 2>&1; then DE=xfce; |
337 fi | 338 fi |
338 } | 339 } |
339 | 340 |
340 #---------------------------------------------------------------------------- | 341 #---------------------------------------------------------------------------- |
341 # kfmclient exec/openURL can give bogus exit value in KDE <= 3.5.4 | 342 # kfmclient exec/openURL can give bogus exit value in KDE <= 3.5.4 |
342 # It also always returns 1 in KDE 3.4 and earlier | 343 # It also always returns 1 in KDE 3.4 and earlier |
343 # Simply return 0 in such case | 344 # Simply return 0 in such case |
344 | 345 |
345 kfmclient_fix_exit_code() | 346 kfmclient_fix_exit_code() |
346 { | 347 { |
347 version=`kde${KDE_SESSION_VERSION}-config --version 2>/dev/null | grep KDE` | 348 version=`kde${KDE_SESSION_VERSION}-config --version 2>/dev/null | grep KDE` |
348 major=`echo $version | sed 's/KDE: \([0-9]\).*/\1/'` | 349 major=`echo $version | sed 's/KDE: \([0-9]\).*/\1/'` |
349 minor=`echo $version | sed 's/KDE: [0-9]*\.\([0-9]\).*/\1/'` | 350 minor=`echo $version | sed 's/KDE: [0-9]*\.\([0-9]\).*/\1/'` |
350 release=`echo $version | sed 's/KDE: [0-9]*\.[0-9]*\.\([0-9]\).*/\1/'` | 351 release=`echo $version | sed 's/KDE: [0-9]*\.[0-9]*\.\([0-9]\).*/\1/'` |
351 test "$major" -gt 3 && return $1 | 352 test "$major" -gt 3 && return $1 |
352 test "$minor" -gt 5 && return $1 | 353 test "$minor" -gt 5 && return $1 |
353 test "$release" -gt 4 && return $1 | 354 test "$release" -gt 4 && return $1 |
354 return 0 | 355 return 0 |
355 } | 356 } |
356 | 357 |
357 # Check if we can use "mv -T" | 358 # Check if we can use "mv -T" |
358 if mv -T ... ... 2>&1 | grep '\.\.\.' > /dev/null ; then | 359 if mv -T ... ... 2>&1 | grep '\.\.\.' > /dev/null ; then |
359 # We can securely move files in /tmp with mv -T | 360 # We can securely move files in /tmp with mv -T |
360 DEBUG 1 "mv -T available" | 361 DEBUG 1 "mv -T available" |
361 MV="mv -T" | 362 MV="mv -T" |
362 screensaver_file="/tmp/xdg-screensaver-$USER-"`echo $DISPLAY | sed 's/:/-/g'` | 363 screensaver_file="/tmp/xdg-screensaver-$USER-"`echo $DISPLAY | sed 's/:/-/g'` |
363 else | 364 else |
364 # No secure moves available, use home dir | 365 # No secure moves available, use home dir |
365 DEBUG 1 "mv -T not available" | 366 DEBUG 1 "mv -T not available" |
366 MV="mv" | 367 MV="mv" |
367 screensaver_file="$HOME/.xdg-screensaver-"`echo $(hostname)-$DISPLAY | sed 's
/:/-/g'` | 368 screensaver_file="$HOME/.xdg-screensaver-"`echo $(hostname)-$DISPLAY | sed 's
/:/-/g'` |
368 fi | 369 fi |
369 lockfile_command=`which lockfile 2> /dev/null` | 370 lockfile_command=`which lockfile 2> /dev/null` |
370 | 371 |
371 lockfile() | 372 lockfile() |
372 { | 373 { |
373 if [ -n "$lockfile_command" ] ; then | 374 if [ -n "$lockfile_command" ] ; then |
374 $lockfile_command -1 -l 10 -s 3 "$screensaver_file".lock | 375 $lockfile_command -1 -l 10 -s 3 "$screensaver_file".lock |
375 else | 376 else |
376 # Poor man's attempt at doing a lockfile | 377 # Poor man's attempt at doing a lockfile |
377 # Be careful not to facilitate a symlink attack | 378 # Be careful not to facilitate a symlink attack |
378 local try | 379 local try |
379 try=0 | 380 try=0 |
380 while ! ln -s "$screensaver_file".lock "$screensaver_file".lock 2> /dev/nul
l; | 381 while ! ln -s "$screensaver_file".lock "$screensaver_file".lock 2> /dev/nul
l; |
381 do | 382 do |
382 sleep 1 | 383 sleep 1 |
383 try=$(($try+1)) | 384 try=$(($try+1)) |
384 if [ $try -eq 3 ] ; then | 385 if [ $try -eq 3 ] ; then |
385 rm -f "$screensaver_file".lock || return # Can't remove lockfile | 386 rm -f "$screensaver_file".lock || return # Can't remove lockfile |
386 try=0 | 387 try=0 |
387 fi | 388 fi |
388 done | 389 done |
389 fi | 390 fi |
390 } | 391 } |
391 | 392 |
392 unlockfile() | 393 unlockfile() |
393 { | 394 { |
394 rm -f "$screensaver_file".lock | 395 rm -f "$screensaver_file".lock |
(...skipping 12 matching lines...) Expand all Loading... |
407 fi | 408 fi |
408 fi | 409 fi |
409 if [ "$1" = "reset" ] ; then | 410 if [ "$1" = "reset" ] ; then |
410 if xset -q | grep 'DPMS is Enabled' > /dev/null 2> /dev/null; then | 411 if xset -q | grep 'DPMS is Enabled' > /dev/null 2> /dev/null; then |
411 xset dpms force on | 412 xset dpms force on |
412 fi | 413 fi |
413 fi | 414 fi |
414 | 415 |
415 case "$DE" in | 416 case "$DE" in |
416 kde) | 417 kde) |
417 screensaver_kde "$1" | 418 if [ x"$KDE_SESSION_VERSION" = x"4" ]; then |
| 419 screensaver_freedesktop "$1" |
| 420 else |
| 421 screensaver_kde "$1" |
| 422 fi |
418 ;; | 423 ;; |
419 | 424 |
420 gnome) | 425 gnome_screensaver) |
421 screensaver_gnome "$1" | 426 screensaver_gnome_screensaver "$1" |
422 ;; | 427 ;; |
423 | 428 |
424 xscreensaver) | 429 xscreensaver) |
425 screensaver_xscreensaver "$1" | 430 screensaver_xscreensaver "$1" |
426 ;; | 431 ;; |
427 esac | 432 esac |
428 | 433 |
429 if [ "$1" = "suspend" ] ; then | 434 if [ "$1" = "suspend" ] ; then |
430 # Save DPMS state | 435 # Save DPMS state |
431 if xset -q | grep 'DPMS is Enabled' > /dev/null 2> /dev/null; then | 436 if xset -q | grep 'DPMS is Enabled' > /dev/null 2> /dev/null; then |
(...skipping 21 matching lines...) Expand all Loading... |
453 perform_action resume | 458 perform_action resume |
454 else | 459 else |
455 unlockfile | 460 unlockfile |
456 fi | 461 fi |
457 } | 462 } |
458 | 463 |
459 do_resume() | 464 do_resume() |
460 { | 465 { |
461 lockfile # Obtain lockfile | 466 lockfile # Obtain lockfile |
462 # Find the PID of the trackingprocess | 467 # Find the PID of the trackingprocess |
463 xprop_pid=`grep "$window_id:" "$screensaver_file" 2> /dev/null | cut -d ':' -f
2` | 468 xprop_pid=`grep "$window_id:" "$screensaver_file" 2> /dev/null | cut -d ':' -f
2` |
464 unlockfile # Free lockfile | 469 unlockfile # Free lockfile |
465 if [ -n "$xprop_pid" ] && ps -p "$xprop_pid" 2> /dev/null | grep xprop > /dev/
null; then | 470 if [ -n "$xprop_pid" ] && ps -p "$xprop_pid" 2> /dev/null | grep xprop > /dev/
null; then |
466 # Kill the tracking process | 471 # Kill the tracking process |
467 kill -s TERM $xprop_pid | 472 kill -s TERM $xprop_pid |
468 fi | 473 fi |
469 cleanup_suspend | 474 cleanup_suspend |
470 } | 475 } |
471 | 476 |
472 XPROP=`which xprop 2> /dev/null` | 477 XPROP=`which xprop 2> /dev/null` |
473 | 478 |
474 check_window_id() | 479 check_window_id() |
475 { | 480 { |
476 if [ -z "$XPROP" ]; then | 481 if [ -z "$XPROP" ]; then |
477 DEBUG 3 "xprop not found" | 482 DEBUG 3 "xprop not found" |
478 return | 483 return |
479 fi | 484 fi |
480 DEBUG 2 "Running $XPROP -id $window_id" | 485 DEBUG 2 "Running $XPROP -id $window_id" |
481 if $XPROP -id $window_id > /dev/null 2> /dev/null; then | 486 if $XPROP -id $window_id > /dev/null 2> /dev/null; then |
482 DEBUG 3 Window $window_id exists | 487 DEBUG 3 Window $window_id exists |
483 else | 488 else |
484 DEBUG 3 Window $window_id does not exist | 489 DEBUG 3 Window $window_id does not exist |
485 exit_failure_operation_failed "Window $window_id does not exist" | 490 exit_failure_operation_failed "Window $window_id does not exist" |
486 fi | 491 fi |
487 } | 492 } |
488 | 493 |
489 track_window() | 494 track_window() |
(...skipping 10 matching lines...) Expand all Loading... |
500 # Return if $window_id is being tracked already | 505 # Return if $window_id is being tracked already |
501 ( | 506 ( |
502 already_tracked=1 | 507 already_tracked=1 |
503 IFS_save="$IFS" | 508 IFS_save="$IFS" |
504 IFS=":" | 509 IFS=":" |
505 while read wid pid; do | 510 while read wid pid; do |
506 if ps -p "$pid" 2> /dev/null | grep xprop > /dev/null; then | 511 if ps -p "$pid" 2> /dev/null | grep xprop > /dev/null; then |
507 echo "$wid:$pid" | 512 echo "$wid:$pid" |
508 if [ $wid = $window_id ] ; then | 513 if [ $wid = $window_id ] ; then |
509 already_tracked=0 | 514 already_tracked=0 |
510 fi | 515 fi |
511 fi | 516 fi |
512 done | 517 done |
513 IFS="$IFS_save" | 518 IFS="$IFS_save" |
514 exit $already_tracked | 519 exit $already_tracked |
515 ) < $screensaver_file > $tmpfile | 520 ) < $screensaver_file > $tmpfile |
516 already_tracked=$? | 521 already_tracked=$? |
517 | 522 |
518 if [ "$already_tracked" -eq "0" ] ; then | 523 if [ "$already_tracked" -eq "0" ] ; then |
519 $MV "$tmpfile" "$screensaver_file" | 524 $MV "$tmpfile" "$screensaver_file" |
520 # We are already tracking $window_id, don't do anything | 525 # We are already tracking $window_id, don't do anything |
521 unlockfile | 526 unlockfile |
522 return | 527 return |
523 fi | 528 fi |
524 | 529 |
525 # Start tracking $window_id | 530 # Start tracking $window_id |
526 $XPROP -id $window_id -spy > /dev/null & | 531 $XPROP -id $window_id -spy > /dev/null & |
527 xprop_pid=$! | 532 xprop_pid=$! |
528 # Add window_id and xprop_pid to the xdg-screensave status file | 533 # Add window_id and xprop_pid to the xdg-screensave status file |
529 echo "$window_id:$xprop_pid" >> $tmpfile | 534 echo "$window_id:$xprop_pid" >> $tmpfile |
530 $MV "$tmpfile" "$screensaver_file" | 535 $MV "$tmpfile" "$screensaver_file" |
531 unlockfile | 536 unlockfile |
532 # Wait for xprop to edit, it means that the window disappeared | 537 # Wait for xprop to edit, it means that the window disappeared |
533 wait $xprop_pid | 538 wait $xprop_pid |
534 # Clean up the administration and resume the screensaver | 539 # Clean up the administration and resume the screensaver |
535 cleanup_suspend | 540 cleanup_suspend |
536 } | 541 } |
537 | 542 |
538 screensaver_freedesktop()
| 543 screensaver_freedesktop() |
539 {
| 544 { |
540 case "$1" in
| 545 case "$1" in |
541 suspend)
| 546 suspend) |
542 #FIXME (get/store cookie)
| 547 dbus-send --session \ |
543 qdbus org.freedesktop.ScreenSaver /ScreenSaver org.freedesktop.ScreenSav
er.Inhibit $window_id xdg-screensaver > /dev/null
| 548 --dest=org.freedesktop.ScreenSaver \ |
544 result=$?
| 549 --type=method_call \ |
545 ;;
| 550 --print-reply \ |
546
| 551 --reply-timeout=2000 \ |
547 resume)
| 552 /ScreenSaver \ |
548 qdbus org.freedesktop.ScreenSaver /ScreenSaver org.freedesktop.ScreenSav
er.SetActive true > /dev/null | 553 org.freedesktop.ScreenSaver.Inhibit \ |
549 result=$?
| 554 string:$window_id \ |
550 ;;
| 555 string:xdg-screensaver \ |
551
| 556 | grep uint32 | cut -d ' ' -f 5 >| "$screensaver_file.cookie"
\ |
552 activate)
| 557 2> /dev/null |
553 qdbus org.freedesktop.ScreenSaver /ScreenSaver org.freedesktop.ScreenSav
er.SetActive true > /dev/null | 558 result=$? |
554 result=$?
| 559 ;; |
555 ;;
| 560 |
556
| 561 resume) |
557 lock)
| 562 if [ -f "$screensaver_file.cookie" ] ; then |
558 qdbus org.freedesktop.ScreenSaver /ScreenSaver org.freedesktop.ScreenSav
er.Lock > /dev/null | 563 value=`cat "$screensaver_file.cookie"` |
559 ;;
| 564 dbus-send --session \ |
560
| 565 --dest=org.freedesktop.ScreenSaver \ |
561 reset)
| 566 --type=method_call \ |
562 #FIXME (cookies?)
| 567 /ScreenSaver \ |
563 qdbus org.freedesktop.ScreenSaver /ScreenSaver org.freedesktop.ScreenSav
er.UnInhibit $window_id > /dev/null
| 568 org.freedesktop.ScreenSaver.UnInhibit \ |
564 result=$?
| 569 uint32:$value \ |
565 ;;
| 570 2> /dev/null |
566
| 571 rm -f "$screensaver_file.cookie" |
567 status)
| 572 fi |
568 status=`qdbus org.freedesktop.ScreenSaver /ScreenSaver org.freedesktop.S
creenSaver.GetActive` | 573 result=$? |
| 574 ;; |
| 575 |
| 576 activate) |
| 577 dbus-send --session \ |
| 578 --dest=org.freedesktop.ScreenSaver \ |
| 579 --type=method_call \ |
| 580 /ScreenSaver \ |
| 581 org.freedesktop.ScreenSaver.SetActive \ |
| 582 boolean:true \ |
| 583 2> /dev/null |
| 584 result=$? |
| 585 ;; |
| 586 |
| 587 lock) |
| 588 dbus-send --session \ |
| 589 --dest=org.freedesktop.ScreenSaver \ |
| 590 --type=method_call \ |
| 591 /ScreenSaver \ |
| 592 org.freedesktop.ScreenSaver.Lock \ |
| 593 2> /dev/null |
| 594 ;; |
| 595 |
| 596 reset) |
| 597 if [ -f "$screensaver_file.cookie" ] ; then |
| 598 value=`cat "$screensaver_file.cookie"` |
| 599 dbus-send --session \ |
| 600 --dest=org.freedesktop.ScreenSaver \ |
| 601 --type=method_call \ |
| 602 /ScreenSaver \ |
| 603 org.freedesktop.ScreenSaver.UnInhibit \ |
| 604 uint32:$value \ |
| 605 2> /dev/null |
| 606 rm -f "$screensaver_file.cookie" |
| 607 fi |
| 608 result=$? |
| 609 ;; |
| 610 |
| 611 status) |
| 612 status=`dbus-send --session \ |
| 613 --dest=org.freedesktop.ScreenSaver \ |
| 614 --type=method_call \ |
| 615 --print-reply \ |
| 616 --reply-timeout=2000 \ |
| 617 /ScreenSaver \ |
| 618 org.freedesktop.ScreenSaver.GetActive \ |
| 619 | grep boolean | cut -d ' ' -f 5` |
569 result=$? | 620 result=$? |
570 if [ x"$status" = "xtrue" ]; then | 621 if [ x"$status" = "xtrue" ]; then |
571 echo "enabled" | 622 echo "enabled" |
572 elif [ x"$status" = "xfalse" ]; then | 623 elif [ x"$status" = "xfalse" ]; then |
573 echo "disabled" | 624 echo "disabled" |
574 else | 625 else |
575 echo "ERROR: dbus org.freedesktop.ScreenSaver.GetActive returned '$s
tatus'" >&2 | 626 echo "ERROR: dbus org.freedesktop.ScreenSaver.GetActive returned '$s
tatus'" >&2 |
576 return 1 | 627 return 1 |
577 fi | 628 fi |
578 ;; | 629 ;; |
579 | 630 |
580 *) | 631 *) |
581 echo "ERROR: Unknown command '$1'" >&2 | 632 echo "ERROR: Unknown command '$1'" >&2 |
582 return 1 | 633 return 1 |
583 ;; | 634 ;; |
584 esac | 635 esac |
585 } | 636 } |
586 | 637 |
587 screensaver_kde() | 638 screensaver_kde() |
588 { | 639 { |
589 case "$1" in | 640 case "$1" in |
590 suspend) | 641 suspend) |
591 dcop kdesktop KScreensaverIface enable false > /dev/null | 642 dcop kdesktop KScreensaverIface enable false > /dev/null |
592 result=$? | 643 result=$? |
593 ;; | 644 ;; |
594 | 645 |
595 resume) | 646 resume) |
596 dcop kdesktop KScreensaverIface configure > /dev/null | 647 dcop kdesktop KScreensaverIface configure > /dev/null |
597 result=$? | 648 result=$? |
598 ;; | 649 ;; |
599 | 650 |
600 activate) | 651 activate) |
601 dcop kdesktop KScreensaverIface save > /dev/null | 652 dcop kdesktop KScreensaverIface save > /dev/null |
602 result=$? | 653 result=$? |
603 ;; | 654 ;; |
604 | 655 |
605 lock) | 656 lock) |
606 dcop kdesktop KScreensaverIface lock > /dev/null | 657 dcop kdesktop KScreensaverIface lock > /dev/null |
607 result=$? | 658 result=$? |
608 ;; | 659 ;; |
609 | 660 |
610 reset) | 661 reset) |
611 # Turns the screensaver off right now | 662 # Turns the screensaver off right now |
612 dcop kdesktop KScreensaverIface quit > /dev/null | 663 dcop kdesktop KScreensaverIface quit > /dev/null |
613 result=$? | 664 result=$? |
614 ;; | 665 ;; |
615 | 666 |
616 status) | 667 status) |
617 status=`dcop kdesktop KScreensaverIface isEnabled` | 668 status=`dcop kdesktop KScreensaverIface isEnabled` |
618 result=$? | 669 result=$? |
619 if [ x"$status" = "xtrue" ]; then | 670 if [ x"$status" = "xtrue" ]; then |
(...skipping 26 matching lines...) Expand all Loading... |
646 if ps -p "$pid" 2> /dev/null | grep xprop > /dev/null; then | 697 if ps -p "$pid" 2> /dev/null | grep xprop > /dev/null; then |
647 echo "$wid:$pid" | 698 echo "$wid:$pid" |
648 fi | 699 fi |
649 done | 700 done |
650 IFS="$IFS_save" | 701 IFS="$IFS_save" |
651 ) > $tmpfile | 702 ) > $tmpfile |
652 if [ -s "$tmpfile" ] ; then | 703 if [ -s "$tmpfile" ] ; then |
653 # Suspend pending, don't do a thing | 704 # Suspend pending, don't do a thing |
654 $MV "$tmpfile" "$screensaver_file" | 705 $MV "$tmpfile" "$screensaver_file" |
655 unlockfile | 706 unlockfile |
656 return | 707 return |
657 fi | 708 fi |
658 $MV "$tmpfile" "$screensaver_file" | 709 $MV "$tmpfile" "$screensaver_file" |
659 unlockfile | 710 unlockfile |
660 (while [ -f "$screensaver_file" ]; do $*; sleep 50; done) > /dev/null 2> /dev/
null & | 711 (while [ -f "$screensaver_file" ]; do $*; sleep 50; done) > /dev/null 2> /dev/
null & |
661 } | 712 } |
662 | 713 |
663 screensaver_gnome() | 714 screensaver_gnome_screensaver() |
664 { | 715 { |
665 # TODO | 716 # TODO |
666 # There seems to be a DBUS interface for gnome-screensaver | 717 # There seems to be a DBUS interface for gnome-screensaver |
667 # See http://lists.mplayerhq.hu/pipermail/mplayer-dev-eng/2006-April/042579.html
and | 718 # See http://lists.mplayerhq.hu/pipermail/mplayer-dev-eng/2006-April/042579.html
and |
668 # http://cvs.gnome.org/viewcvs/gnome-screensaver/src/gs-listener-dbus.c?rev=1.36
&view=log | 719 # http://cvs.gnome.org/viewcvs/gnome-screensaver/src/gs-listener-dbus.c?rev=1.36
&view=log |
669 # A problem seems to be that Inhibit is tied to the lifetime of the DBUS appname
and | 720 # A problem seems to be that Inhibit is tied to the lifetime of the DBUS appname
and |
670 # this can not be used from a script | 721 # this can not be used from a script |
671 case "$1" in | 722 case "$1" in |
672 suspend) | 723 suspend) |
673 screensaver_suspend_loop gnome-screensaver-command --poke | 724 screensaver_suspend_loop gnome-screensaver-command --poke |
674 result=0 | 725 result=0 |
675 ;; | 726 ;; |
676 | 727 |
677 resume) | 728 resume) |
678 # Automatic resume when $screensaver_file disappears | 729 # Automatic resume when $screensaver_file disappears |
679 result=0 | 730 result=0 |
680 ;; | 731 ;; |
681 | 732 |
682 activate) | 733 activate) |
683 gnome-screensaver-command --activate > /dev/null 2> /dev/null | 734 gnome-screensaver-command --activate > /dev/null 2> /dev/null |
684 result=$? | 735 result=$? |
685 ;; | 736 ;; |
686 | 737 |
687 lock) | 738 lock) |
688 gnome-screensaver-command --lock > /dev/null 2> /dev/null | 739 gnome-screensaver-command --lock > /dev/null 2> /dev/null |
689 result=$? | 740 result=$? |
690 ;; | 741 ;; |
691 | 742 |
692 reset) | 743 reset) |
693 # Turns the screensaver off right now | 744 # Turns the screensaver off right now |
694 gnome-screensaver-command --deactivate > /dev/null 2> /dev/null | 745 gnome-screensaver-command --deactivate > /dev/null 2> /dev/null |
695 result=$? | 746 result=$? |
696 ;; | 747 ;; |
697 | 748 |
698 status) | 749 status) |
699 result=0 | 750 result=0 |
700 if [ -f "$screensaver_file" ] ; then | 751 if [ -f "$screensaver_file" ] ; then |
701 echo "disabled" | 752 echo "disabled" |
702 elif gnome-screensaver-command --query > /dev/null 2> /dev/null; then | 753 elif gnome-screensaver-command --query > /dev/null 2> /dev/null; then |
703 echo "enabled" | 754 echo "enabled" |
704 else | 755 else |
705 # Something is wrong | 756 # Something is wrong |
706 echo "disabled" | 757 echo "disabled" |
707 fi | 758 fi |
708 ;; | 759 ;; |
709 | 760 |
710 *) | 761 *) |
711 echo "ERROR: Unknown command '$1" >&2 | 762 echo "ERROR: Unknown command '$1" >&2 |
712 return 1 | 763 return 1 |
713 ;; | 764 ;; |
714 esac | 765 esac |
715 } | 766 } |
716 | 767 |
717 screensaver_xscreensaver() | 768 screensaver_xscreensaver() |
718 { | 769 { |
719 case "$1" in | 770 case "$1" in |
720 suspend) | 771 suspend) |
721 screensaver_suspend_loop xscreensaver-command -deactivate | 772 screensaver_suspend_loop xscreensaver-command -deactivate |
722 result=0 | 773 result=0 |
723 ;; | 774 ;; |
724 | 775 |
725 resume) | 776 resume) |
726 # Automatic resume when $screensaver_file disappears | 777 # Automatic resume when $screensaver_file disappears |
727 result=0 | 778 result=0 |
728 ;; | 779 ;; |
729 | 780 |
730 activate) | 781 activate) |
731 xscreensaver-command -activate > /dev/null 2> /dev/null | 782 xscreensaver-command -activate > /dev/null 2> /dev/null |
732 result=$? | 783 result=$? |
733 ;; | 784 ;; |
734 | 785 |
735 lock) | 786 lock) |
736 xscreensaver-command -lock > /dev/null 2> /dev/null | 787 xscreensaver-command -lock > /dev/null 2> /dev/null |
737 result=$? | 788 result=$? |
738 ;; | 789 ;; |
739 | 790 |
740 reset) | 791 reset) |
741 # Turns the screensaver off right now | 792 # Turns the screensaver off right now |
742 xscreensaver-command -deactivate > /dev/null 2> /dev/null | 793 xscreensaver-command -deactivate > /dev/null 2> /dev/null |
743 result=$? | 794 result=$? |
744 ;; | 795 ;; |
745 | 796 |
746 status) | 797 status) |
747 result=0 | 798 result=0 |
748 if [ -f "$screensaver_file" ] ; then | 799 if [ -f "$screensaver_file" ] ; then |
749 echo "disabled" | 800 echo "disabled" |
(...skipping 10 matching lines...) Expand all Loading... |
760 } | 811 } |
761 | 812 |
762 [ x"$1" != x"" ] || exit_failure_syntax | 813 [ x"$1" != x"" ] || exit_failure_syntax |
763 | 814 |
764 action= | 815 action= |
765 window_id= | 816 window_id= |
766 | 817 |
767 case $1 in | 818 case $1 in |
768 suspend) | 819 suspend) |
769 action="$1" | 820 action="$1" |
770 | 821 |
771 shift | 822 shift |
772 | 823 |
773 if [ -z "$1" ] ; then | 824 if [ -z "$1" ] ; then |
774 exit_failure_syntax "WindowID argument missing" | 825 exit_failure_syntax "WindowID argument missing" |
775 fi | 826 fi |
776 | 827 |
777 window_id="$1" | 828 window_id="$1" |
778 check_window_id | 829 check_window_id |
779 ;; | 830 ;; |
780 | 831 |
781 resume) | 832 resume) |
782 action="$1" | 833 action="$1" |
783 | 834 |
784 shift | 835 shift |
785 | 836 |
786 if [ -z "$1" ] ; then | 837 if [ -z "$1" ] ; then |
787 exit_failure_syntax "WindowID argument missing" | 838 exit_failure_syntax "WindowID argument missing" |
788 fi | 839 fi |
789 | 840 |
790 window_id="$1" | 841 window_id="$1" |
791 check_window_id | 842 check_window_id |
792 ;; | 843 ;; |
793 | 844 |
794 activate) | 845 activate) |
795 action="$1" | 846 action="$1" |
796 ;; | 847 ;; |
797 | 848 |
798 lock) | 849 lock) |
799 action="$1" | 850 action="$1" |
800 ;; | 851 ;; |
801 | 852 |
802 reset) | 853 reset) |
803 action="$1" | 854 action="$1" |
804 ;; | 855 ;; |
805 | 856 |
806 status) | 857 status) |
807 action="$1" | 858 action="$1" |
808 ;; | 859 ;; |
809 | 860 |
810 *) | 861 *) |
811 exit_failure_syntax "unknown command '$1'" | 862 exit_failure_syntax "unknown command '$1'" |
812 ;; | 863 ;; |
813 esac | 864 esac |
814 | 865 |
815 detectDE | 866 detectDE |
816 # Consider "xscreensaver" a separate DE | 867 # Consider "xscreensaver" a separate DE |
817 xscreensaver-command -version 2> /dev/null | grep XScreenSaver > /dev/null && DE
="xscreensaver" | 868 xscreensaver-command -version 2> /dev/null | grep XScreenSaver > /dev/null && DE
="xscreensaver" |
| 869 # Consider "gnome-screensaver" a separate DE |
| 870 gnome-screensaver-command -q > /dev/null 2>&1 && DE="gnome_screensaver" |
818 | 871 |
819 if [ "$action" = "resume" ] ; then | 872 if [ "$action" = "resume" ] ; then |
820 do_resume | 873 do_resume |
821 exit_success | 874 exit_success |
822 fi | 875 fi |
823 | 876 |
824 perform_action "$action" | 877 perform_action "$action" |
825 | 878 |
826 if [ "$action" = "suspend" ] ; then | 879 if [ "$action" = "suspend" ] ; then |
827 # Start tracking $window_id and resume the screensaver once it disappears | 880 # Start tracking $window_id and resume the screensaver once it disappears |
828 ( track_window ) 2> /dev/null > /dev/null & | 881 ( track_window ) 2> /dev/null > /dev/null & |
829 fi | 882 fi |
830 | 883 |
831 if [ $result -eq 0 ]; then | 884 if [ $result -eq 0 ]; then |
832 exit_success | 885 exit_success |
833 else | 886 else |
834 exit_failure_operation_failed | 887 exit_failure_operation_failed |
835 fi | 888 fi |
OLD | NEW |