summaryrefslogtreecommitdiff
path: root/scripts/desktop
diff options
context:
space:
mode:
authorSean Whitton <spwhitton@spwhitton.name>2022-12-06 23:03:44 -0700
committerSean Whitton <spwhitton@spwhitton.name>2022-12-07 09:41:16 -0700
commit13f08e9d36de02c54283993d2bd035adf13f0411 (patch)
tree8270a1dfe4916b9e70e173f4b2957d86e56e9e12 /scripts/desktop
parente27b9fcc8e89e847a4c7f7f6a80cc15e991dd260 (diff)
downloaddotfiles-13f08e9d36de02c54283993d2bd035adf13f0411.tar.gz
bin/: some straightforward tidying up
Diffstat (limited to 'scripts/desktop')
-rwxr-xr-xscripts/desktop/i3-startup-always119
-rwxr-xr-xscripts/desktop/xuserrun58
2 files changed, 177 insertions, 0 deletions
diff --git a/scripts/desktop/i3-startup-always b/scripts/desktop/i3-startup-always
new file mode 100755
index 00000000..b2a02e25
--- /dev/null
+++ b/scripts/desktop/i3-startup-always
@@ -0,0 +1,119 @@
+#!/bin/sh
+
+# idempotent X settings
+
+xrdb -merge "$HOME/.Xresources"
+
+# ---- don't let other local users spawn windows on my main X session
+
+xhost -local:
+
+# ---- no bell please
+
+xset b off
+
+# ---- keyboard settings
+
+xset r rate 380 25
+
+# enable numlock if using USB keyboard, with an exception
+if ! lsusb | grep -q "SiGma Micro Keyboard TRACER Gamma Ivory"; then
+ . /etc/X11/Xsession.d/55numlockx
+fi
+
+# disable caps lock if I accidently hit it before running this script
+if xset -q | grep "Caps Lock: *on" >/dev/null; then
+ xdotool key Caps_Lock
+fi
+
+# ---- wallpaper rotation
+
+# if [ -e "$HOME/local/wallpaper.png" ] \
+# && ! systemctl --user --quiet is-enabled i3-rotate-wallpaper.timer; then
+# # Persistent=true only works if the timer has been triggered at
+# # least once, but my computer is generally suspended at midnight.
+# # So pretend that the job just fired
+# mkdir -p "$HOME/.local/share/systemd/timers"
+# touch "$HOME/.local/share/systemd/timers/stamp-i3-rotate-wallpaper.timer"
+
+# systemctl --user --now enable i3-rotate-wallpaper.timer
+# fi
+
+# ---- monitor settings
+
+# if this machine is always plugged into the same monitor, may
+# `convert ~/lib/annex/doc/img/wallpaper/foo -resize 1366x768\!
+# ~/local/wallpaper.png` or add a cronjob to call i3-rotate-wallpaper.
+# Otherwise, stick to a solid colour, because doing otherwise requires
+# resizing the image file, setting the root window and restarting
+# i3lock every time an external monitor is plugged or unplugged
+#
+# For images that look bad stretched, to get black borders: convert foo.jpg -resize 1920x1080 -background black -gravity center -extent 1920x1080 ~/local/wallpaper.png
+
+# xsetroot -solid \#2c2c2e
+# xsetroot -solid \#111111
+# xsetroot -solid \#E5E5E5
+# xsetroot -solid \#FFFFF6
+
+# machine-specific display settings
+if [ "$(hostname -f)" = "iris.silentflame.com" ]; then
+ # set-half-brightness
+ if xrandr | grep "VGA-1 connected"; then
+ xrandr \
+ --output VGA-1 --primary --mode 1920x1080 --pos 0x0 --rotate normal \
+ --output LVDS-1 --mode 1366x768 --pos 1920x312 --rotate normal
+ else
+ xrandr \
+ --output VGA-1 --off \
+ --output LVDS-1 --primary --mode 1366x768 --pos 0x0 --rotate normal
+ fi
+elif [ "$(hostname -f)" = "melete.silentflame.com" ]; then
+ # set-half-brightness
+ # need this to set --primary, to ensure that i3 tray icons appear on
+ # laptop monitor
+ xrandr --output eDP-1 --primary --mode 1920x1080 --pos 0x0 --rotate normal
+fi
+
+# # use wallpaper.png if it's the right size
+# if i3-wallpaper --check-have; then
+# feh --bg-scale --no-xinerama $HOME/local/wallpaper.png
+
+# # restart i3lock, in case the wallpaper changed
+# i3-startup-i3lock
+# else
+ # feh --bg-tile ~/src/dotfiles/lib-src/img/diagmonds_2X.png
+# fi
+
+feh --bg-tile ~/src/dotfiles/lib-src/img/green_gobbler.png
+
+# Set how long before automatic lock. We have the DPMS time and the
+# automatic lock time set to the same value.
+#
+# I used to have have (e.g.) `xset s 150 180; xset dpms 1200 1200 0`
+# with a --notifier option passed to xss-lock which used i3-nagbar to
+# warn of an impending lock. This warning was necessary because
+# xtrlock's visual feedback is low. However, when i3-nagbar (or,
+# indeed, notify-send) is launched by xss-lock, they break the
+# display of various windows until the mouse is moved around. This
+# problem does not occur if I launch i3-nagbar from a terminal window.
+# In that case, everything gets redrawn as it should be.
+#
+# So instead, we wait to lock the screen until the point at which we
+# are blanking it for power saving. The screen going blank is
+# sufficient visual feedback.
+#
+# If my screen actually needs locking, I always just do that manually,
+# so this is only a fallback, in any case.
+#
+# Changes to these values should be kept in sync with comproc.org
+# notes for configuring xfce4-power-manager
+xset s default
+if [ "$(hostname)" = develacc ]; then
+ xset s 0
+ xset dpms 0 0 0
+ xset -dpms
+else
+ xset s 1200
+ xset dpms 1200 1200 1200
+ xset +dpms
+fi
diff --git a/scripts/desktop/xuserrun b/scripts/desktop/xuserrun
new file mode 100755
index 00000000..6ec24350
--- /dev/null
+++ b/scripts/desktop/xuserrun
@@ -0,0 +1,58 @@
+#!/bin/bash
+
+#
+# Run a command as the currently active X11 user
+#
+
+# source: https://github.com/rephorm/xuserrun
+
+seat="seat0"
+
+# determine location of loginctl
+LOGINCTL=$(command -v loginctl || command -v systemd-loginctl)
+if [[ -e LOGINCTL ]]; then
+ echo "Error: Unable to find loginctl executable"
+ exit 1
+fi
+
+get_session_info() {
+ local session="$1"
+ local varname="$2"
+ local IFS=$'\n'
+ eval declare -Ag $varname
+ for row in $(loginctl show-session "$session"); do
+ key="$(echo "${row}"|cut -d= -f1)"
+ val="$(echo "${row}"|cut -d= -f2-)"
+ eval ${varname}[\"${key}\"]=\"${val}\"
+ done
+}
+
+escape() {
+ for arg in "$@" ; do
+ printf "%q " "$arg";
+ done;
+}
+
+active_session="$(loginctl show-seat ${seat}|grep ActiveSession|cut -d= -f2)"
+if [[ $? -ne 0 || -z $active_session ]]; then
+ echo "Error: Unable to determine active session"
+ exit 1
+fi
+
+get_session_info $active_session session_info
+
+if [[ ${session_info[Type]} != "x11" ]]; then
+ echo "Error: Active session is not x11"
+ exit 2
+fi
+
+current_user="$(id -u -n)"
+
+if [[ ${current_user} == ${session_info[Name]} ]]; then
+ # already correct user, no need to su
+ DISPLAY="${session_info[Display]}" "$@"
+else
+ # run command as user
+ DISPLAY="${session_info[Display]}" su -c - "${session_info[Name]}" "$(escape "$@")"
+fi
+