Skip to content

Instantly share code, notes, and snippets.

@shouth
Created January 4, 2020 19:26
Show Gist options
  • Save shouth/51f53e7ba0009cf22517b0d3b8f707b3 to your computer and use it in GitHub Desktop.
Save shouth/51f53e7ba0009cf22517b0d3b8f707b3 to your computer and use it in GitHub Desktop.
Detect Wi-Fi connection to KITnet and switch proxy variables of gnome desktop.
#!/bin/bash
user=$(users | cut -d ' ' -f1)
user_gnome_pid=$(pgrep -U $user gnome-session | head -n 1)
user_gnome_dbus_session=$(strings "/proc/$user_gnome_pid/environ" | grep DBUS_SESSION_BUS_ADDRESS)
export $user_gnome_dbus_session
host='proxy.cis.kit.ac.jp'
port='8080'
case "$2" in
"up" )
access_point=$(iwgetid -r)
case "$access_point" in
"KITnet" | "KITnetW" )
filename="/tmp/kit-proxy-$access_point-$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)"
touch "$filename"
echo "ACCESS_POINT='$access_point'" >> "$filename"
echo "PROXY_MODE=$(sudo -u $user -E gsettings get org.gnome.system.proxy mode)" >> "$filename"
echo "PROXY_HTTP_HOST=$(sudo -u $user -E gsettings get org.gnome.system.proxy.http host)" >> "$filename"
echo "PROXY_HTTP_PORT=$(sudo -u $user -E gsettings get org.gnome.system.proxy.http port)" >> "$filename"
echo "PROXY_HTTPS_HOST=$(sudo -u $user -E gsettings get org.gnome.system.proxy.https host)" >> "$filename"
echo "PROXY_HTTPS_PORT=$(sudo -u $user -E gsettings get org.gnome.system.proxy.https port)" >> "$filename"
echo "PROXY_FTP_HOST=$(sudo -u $user -E gsettings get org.gnome.system.proxy.ftp host)" >> "$filename"
echo "PROXY_FTP_PORT=$(sudo -u $user -E gsettings get org.gnome.system.proxy.ftp port)" >> "$filename"
echo "PROXY_SOCKS_HOST=$(sudo -u $user -E gsettings get org.gnome.system.proxy.socks host)" >> "$filename"
echo "PROXY_SOCKS_PORT=$(sudo -u $user -E gsettings get org.gnome.system.proxy.socks port)" >> "$filename"
echo "PROXY_IGNORE_HOSTS=\"$(sudo -u $user -E gsettings get org.gnome.system.proxy ignore-hosts)\"" >> "$filename"
sudo -u $user -E gsettings set org.gnome.system.proxy mode 'manual'
sudo -u $user -E gsettings set org.gnome.system.proxy.http host $host
sudo -u $user -E gsettings set org.gnome.system.proxy.http port $port
sudo -u $user -E gsettings set org.gnome.system.proxy.https host $host
sudo -u $user -E gsettings set org.gnome.system.proxy.https port $port
sudo -u $user -E gsettings set org.gnome.system.proxy.ftp host $host
sudo -u $user -E gsettings set org.gnome.system.proxy.ftp port $port
sudo -u $user -E gsettings set org.gnome.system.proxy.socks host ''
sudo -u $user -E gsettings set org.gnome.system.proxy.socks port ''
sudo -u $user -E gsettings set org.gnome.system.proxy ignore-hosts "['sp-sw01.cis.kit.ac.jp', 'netauth.cis.kit.ac.jp', 'auth.cis.kit.ac.jp', 'localhost', '127.0.0.0/8', '10.0.0.0/8', '172.16.0.0/12', '192.168.0.0/16']"
sudo -u $user -E notify-send "Enabled proxy settings for $access_point"
;;
esac
;;
"down" )
for file in /tmp/kit-proxy-*; do [[ -f "$file" ]] && . "$file"; done
if [[ "$ACCESS_POINT" != '' ]]; then
sudo -u $user -E gsettings set org.gnome.system.proxy mode "$PROXY_MODE"
sudo -u $user -E gsettings set org.gnome.system.proxy.http host "$PROXY_HTTP_HOST"
sudo -u $user -E gsettings set org.gnome.system.proxy.http port "$PROXY_HTTP_PORT"
sudo -u $user -E gsettings set org.gnome.system.proxy.https host "$PROXY_HTTPS_HOST"
sudo -u $user -E gsettings set org.gnome.system.proxy.https port "$PROXY_HTTPS_PORT"
sudo -u $user -E gsettings set org.gnome.system.proxy.ftp host "$PROXY_FTP_HOST"
sudo -u $user -E gsettings set org.gnome.system.proxy.ftp port "$PROXY_FTP_PORT"
sudo -u $user -E gsettings set org.gnome.system.proxy.socks host "$PROXY_SOCKS_HOST"
sudo -u $user -E gsettings set org.gnome.system.proxy.socks port "$PROXY_SOCKS_PORT"
sudo -u $user -E gsettings set org.gnome.system.proxy ignore-hosts "$PROXY_IGNORE_HOSTS"
sudo -u $user -E notify-send "Disabled proxy settings for $ACCESS_POINT"
fi
find /tmp/kit-proxy-* -exec rm {} \;
;;
esac
@shouth
Copy link
Author

shouth commented Jan 4, 2020

This script runs on Ubuntu18.04 with NetworkManager. To use this script, just put this script under /etc/NetworkManager/dispatcher.d and run sudo systemctl restart NetworkManager.service

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