diff options
author | Sean Whitton <spwhitton@spwhitton.name> | 2022-12-06 23:03:44 -0700 |
---|---|---|
committer | Sean Whitton <spwhitton@spwhitton.name> | 2022-12-07 09:41:16 -0700 |
commit | 13f08e9d36de02c54283993d2bd035adf13f0411 (patch) | |
tree | 8270a1dfe4916b9e70e173f4b2957d86e56e9e12 /scripts/desktop | |
parent | e27b9fcc8e89e847a4c7f7f6a80cc15e991dd260 (diff) | |
download | dotfiles-13f08e9d36de02c54283993d2bd035adf13f0411.tar.gz |
bin/: some straightforward tidying up
Diffstat (limited to 'scripts/desktop')
-rwxr-xr-x | scripts/desktop/i3-startup-always | 119 | ||||
-rwxr-xr-x | scripts/desktop/xuserrun | 58 |
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 + |