70 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | |
| # ----------------------------------------------------------------------------
 | |
| # "THE BEER-WARE LICENSE" (Revision 42):
 | |
| # <k.bumsik@gmail.com> wrote this file. As long as you retain this notice you
 | |
| # can do whatever you want with this stuff. If we meet some day, and you think
 | |
| # this stuff is worth it, you can buy me a beer in return. - Bumsik Kim
 | |
| # ----------------------------------------------------------------------------
 | |
| 
 | |
| # Configuration
 | |
| WIDTH=1920 # 1368 for iPad Pro
 | |
| HEIGHT=1080 # 1024 for iPad Pro
 | |
| MODE_NAME="mode_ipad"       # Set whatever name you like, you may need to change
 | |
|                             # this when you change resolution, or just reboot.
 | |
| DIS_NAME="VIRTUAL1"         # Don't change it unless you know what it is
 | |
| RANDR_POS="--right-of"      # Default position setting for xrandr command
 | |
| 
 | |
| # Parse arguments
 | |
| while [ "$#" -gt 0 ]; do
 | |
|   case $1 in
 | |
|     -l|--left)      RANDR_POS="--left-of"  ;;
 | |
|     -r|--right)     RANDR_POS="--right-of" ;;
 | |
|     -a|--above)     RANDR_POS="--above"    ;;
 | |
|     -b|--below)     RANDR_POS="--below"    ;;
 | |
|     -p|--portrait)  TMP=$WIDTH; WIDTH=$HEIGHT; HEIGHT=$TMP
 | |
|                     MODE_NAME="$MODE_NAME""_port"  ;;
 | |
|     -h|--hidpi)     WIDTH=$(($WIDTH * 2)); HEIGHT=$(($HEIGHT * 2))
 | |
|                     MODE_NAME="$MODE_NAME""_hidpi" ;;
 | |
|     *) echo "'$1' cannot be a monitor position"; exit 1 ;;
 | |
|   esac
 | |
|   shift
 | |
| done
 | |
| 
 | |
| # Detect primary display
 | |
| PRIMARY_DISPLAY=$(xrandr | perl -ne 'print "$1" if /(\w*)\s*connected\s*primary/')
 | |
| 
 | |
| # Add display mode
 | |
| RANDR_MODE=$(cvt "$WIDTH" "$HEIGHT" 60 | sed '2s/^.*Modeline\s*\".*\"//;2q;d')
 | |
| xrandr --addmode $DIS_NAME $MODE_NAME 2>/dev/null
 | |
| # If the mode doesn't exist then make mode and retry
 | |
| if ! [ $? -eq 0 ]; then
 | |
|   xrandr --newmode $MODE_NAME $RANDR_MODE
 | |
|   xrandr --addmode $DIS_NAME $MODE_NAME
 | |
| fi
 | |
| 
 | |
| # Show display first
 | |
| xrandr --output $DIS_NAME --mode $MODE_NAME
 | |
| # Then move display
 | |
| sleep 5 # A short delay is needed. Otherwise sometimes the below command is ignored.
 | |
| xrandr --output $DIS_NAME $RANDR_POS $PRIMARY_DISPLAY
 | |
| 
 | |
| # Cleanup before exit
 | |
| function finish {
 | |
|   xrandr --output $DIS_NAME --off
 | |
|   xrandr --delmode $DIS_NAME $MODE_NAME
 | |
|   echo "Second monitor disabled."
 | |
| }
 | |
| 
 | |
| trap finish EXIT
 | |
| 
 | |
| # Get the display's position
 | |
| CLIP_POS=$(xrandr | perl -ne 'print "$1" if /'$DIS_NAME'\s*connected\s*(\d*x\d*\+\d*\+\d*)/')
 | |
| echo $CLIP_POS
 | |
| # Share screen
 | |
| x11vnc -multiptr -repeat -clip $CLIP_POS
 | |
| # Possible alternative is x0vncserver but it does not show the mouse cursor.
 | |
| #   x0vncserver -display :0 -geometry $DIS_NAME -overlaymode -passwordfile ~/.vnc/passwd
 | |
| if ! [ $? -eq 0 ]; then
 | |
|   echo x11vnc failed, did you \'apt-get install x11vnc\'?
 | |
| fi
 |