You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							100 lines
						
					
					
						
							1.7 KiB
						
					
					
				
			
		
		
	
	
							100 lines
						
					
					
						
							1.7 KiB
						
					
					
				| #!/bin/sh | |
|  | |
| help() { | |
| 	B=$(tput bold) | |
| 	U=$(tput smul) | |
| 	N=$(tput sgr0) | |
|  | |
| 	cat << EOF | |
| ${B}NAME${N} | |
| 	monctl - monitor manager | |
|  | |
| ${B}SYNOPSIS${N} | |
| 	${B}monctl${N} [${U}OPTION${N}] [${U}ARG(S)${N}] | |
|  | |
| ${B}OPTIONS${N} | |
| 	${B}a*${N} ${U}width${N} ${U}height${N} ${U}hertz${N} ${U}name${N} | |
| 		Setup single monitor with new mode. | |
|  | |
| 	${B}p*${N} ${U}name${N} ${U}mode${N} | |
| 		Setup single primary monitor. | |
|  | |
| ${B}ARGS${N} | |
| 	width | |
| 		Pixel width of the monitor. | |
|  | |
| 	height | |
| 		Pixel height of the monitor. | |
|  | |
| 	hertz | |
| 		Refresh rate of the monitor. | |
|  | |
| 	name | |
| 		Xrandr name of the monitor. | |
| EOF | |
| } | |
|  | |
| # Exit if no option is provided | |
| [ "$#" -eq 0 ] && help && exit 1 | |
|  | |
| # Set required X variables | |
| export DISPLAY=:0 | |
| export XAUTHORITY="$XDG_DATA_HOME/xorg/Xauthority" | |
|  | |
| update() { | |
| 	sleep 4 | |
|  | |
| 	# Reconfigure desktops | |
| 	"$HOME/.local/bin/wm/desktops.sh" | |
| 	sleep 1 | |
|  | |
| 	# Restart panel | |
| 	"$HOME/.local/bin/panel/polybar.sh" & | |
|  | |
| 	# Reload wallpaper | |
| 	"$HOME/.local/bin/wm/wallpaper.sh" & | |
| } | |
|  | |
| auto() { | |
| 	[ "$#" != "4" ] && return 1 | |
|  | |
| 	# Add mode to primary monitor | |
| 	OUTPUT="$(xrandr -q)" | |
| 	if ! echo "$OUTPUT" | grep -Fq "$1x$2_$3.00"; then | |
| 		eval xrandr --newmode $(cvt "$1" "$2" "$3" | awk '/Modeline/{ $1=""; print $0 }') | |
| 		xrandr --addmode "$4" "$1x$2_$3.00" | |
| 	fi | |
|  | |
| 	primary "$4" "--mode $1x$2_$3.00" | |
| } | |
|  | |
| primary() { | |
| 	[ "$#" != "1" ] && [ "$#" != "2" ] && return 1 | |
| 	MODE=${2:-"--auto"} | |
|  | |
| 	# Get all connected monitors | |
| 	CONNECTED="$(xrandr -q | awk '/ connected/{ print $1 }')" | |
|  | |
| 	# Disable all other monitors | |
| 	eval xrandr --output "$1" "$MODE" --primary \ | |
| 		"$(echo "$CONNECTED" | grep -vx "$1" | awk '{ print "--output", $1, "--off" }' | tr '\n' ' ')" | |
|  | |
| 	# Post monitor change | |
| 	update | |
| } | |
|  | |
| [ $OPTIND -ge 2 ] && shift $((OPTIND - 2)) | |
| case "$1" in | |
| 	a*) | |
| 		shift 1 | |
| 		auto "$@" | |
| 		;; | |
| 	p*) | |
| 		shift 1 | |
| 		primary "$@" | |
| 		;; | |
| 	*) | |
| 		help | |
| 		exit 1 | |
| 		;; | |
| esac
 | |
| 
 |