Skip to content

Instantly share code, notes, and snippets.

@nirbheek
Last active March 6, 2024 09:41
Show Gist options
  • Save nirbheek/5589105 to your computer and use it in GitHub Desktop.
Save nirbheek/5589105 to your computer and use it in GitHub Desktop.
A tiny script to set the transparency for X windows. If AUTOMAGIC_MODE is "true", it tries to find all gnome-terminal windows and applies the transparency to all of them.
#!/bin/bash
# vim: set sts=4 sw=4 et tw=0 :
#
# License: BSD
AUTOMAGIC_MODE="true"
OPACITY_100="0xffffffff"
OPACITY_0="0x0"
: ${XWININFO:=$(type -P xwininfo)}
[[ -z ${XWININFO} ]] && { echo "You need to install xwininfo"; exit 1; }
: ${XPROP:=$(type -P xprop)}
[[ -z ${XPROP} ]] && { echo "You need to install xprop"; exit 1; }
TRANSPARENCY_PERCENT=$1
[[ -z "${TRANSPARENCY_PERCENT}" ]] && { echo "Usage: $0 <transparency in percentage>"; exit 1; }
if [[ ${AUTOMAGIC_MODE} != true ]]; then
echo "Click on a terminal window to set its transparency as specified (${TRANSPARENCY_PERCENT}%)"
TERMINAL_WINDOW_XID=$("$XWININFO" | sed -n 's/.*Window id: \([0-9a-fx]\+\).*/\1/p')
else
# This is very fragile
TERMINAL_WINDOW_XID=$("$XWININFO" -root -tree | grep -v "Terminal" | sed -n 's/^[[:space:]]\+\([0-9a-fx]\+\).*gnome-terminal.*/\1/p')
fi
if [[ $TRANSPARENCY_PERCENT = 100 ]]; then
TRANSPARENCY_HEX="$OPACITY_100"
elif [[ $TRANSPARENCY_PERCENT = 0 ]]; then
TRANSPARENCY_HEX="$OPACITY_0"
else
TRANSPARENCY_HEX=$(printf "0x%x" $((($(printf "%d" $OPACITY_100) * $TRANSPARENCY_PERCENT)/100)))
fi
echo "Setting transparency to $TRANSPARENCY_HEX (${TRANSPARENCY_PERCENT}%)"
for each in $TERMINAL_WINDOW_XID; do
"$XPROP" -id $each -f _NET_WM_WINDOW_OPACITY 32c -set _NET_WM_WINDOW_OPACITY $TRANSPARENCY_HEX
done
@avinashkanaujiya
Copy link

change type -P xprop to type xprop & change type -P xwininfo to type xwininfo.

And it does not work.

@LeisureLinux
Copy link

LeisureLinux commented Oct 5, 2022

Pity that this is not as a repo. so we can contribute.
So far, found not working well on byobu, two display scenario. my fix:
only grep those begin with first 5 space, not other like 7 or whatever so don't care the child windows. Also byobu will work as well.
TERMINAL_WINDOW_XID=$("$XWININFO" -root -tree | grep -E -v "Terminal|Gnome-terminal-server" | sed -n 's/^[[:space:]]{5}([0-9a-fx]+).gnome-terminal./\1/p')

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment