X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=xinitrc;h=e9d81ad3eee9d9465be76ac16af2660d66eeacf6;hb=ebcd4291a5accbd3e01a691c20c5c4963d13415d;hp=162efa4c22d3c2e3ebbb61c4ab7f89b134facd09;hpb=e2fd990755824a259803852496603eb1a1130343;p=config%2Fdotfiles.git diff --git a/xinitrc b/xinitrc index 162efa4..e9d81ad 100755 --- a/xinitrc +++ b/xinitrc @@ -37,6 +37,22 @@ fi installed() { type "$1" >/dev/null 2>&1 } +error() { + if installed xmessage; then + xmessage "$@" & + else + # Log message to a file which is displayed by my Zsh setup on startup. + echo "$@" >> "$HOME/.xinitrc.errors" + fi +} +# Save PID of the most recently started background process. Used to terminate +# them when logging out to prevent unused background processes. On some +# systems this is only necessary for some programs (like ssh-agent), haven't +# yet figured out why. +save_background_pid() { + background_pids="$background_pids $!" +} +background_pids= # Options, can be modified in ~/.xinitrc.local. To disable a boolean option @@ -44,6 +60,13 @@ installed() { # # Default to use a background image. set_background=yes +# Default to display a warning if `xautolock` is not available. +screen_lock_force=yes +# Lock screen after x minutes of inactivity, requires `xautolock` to be +# installed. +screen_lock_time=3 +# Locker program to lock the screen, used below with `xautolock`. +screen_locker=xtrlock # Load settings for the local system. if test -f "$HOME/.xinitrc.local"; then @@ -86,6 +109,7 @@ fi # Display timed reminders and recheck the file for changes every minute (-z1). if installed remind && test -f "$HOME/.reminders"; then remind -z1 -k'.shell/bin/notify.py %s &' "$HOME/.reminders" & + save_background_pid fi # Set color temperature of display according to time of day. @@ -93,6 +117,18 @@ if installed redshift; then redshift -l 49.9:10.9 -t 5500:4500 >/dev/null & fi +# Automatically lock the screen after x minutes of inactivity if `xautolock` +# is available. Warn if locker wasn't found. +if installed xautolock; then + if installed "$screen_locker"; then + xautolock -secure -time "$screen_lock_time" -locker "$screen_locker" & + else + error "Locker '$screen_locker' not installed. Auto lock won't work!" + fi +elif test -n "$screen_lock_force"; then + error "'xautolock' not found. Auto lock won't work!" +fi + # XMonad doesn't start a terminal emulator on its own, start one when I login. (urxvt || rxvt || xterm) & @@ -107,3 +143,5 @@ if test -x /usr/bin/ssh-agent; then /usr/bin/ssh-agent -k >/dev/null # No `eval` necessary, we terminate anyway. fi +# Kill remaining background processes. +kill $background_pids