| 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 |