Last active
March 23, 2023 22:34
-
-
Save MizterB/e7f7ec78559bc995488aa59d490a22d3 to your computer and use it in GitHub Desktop.
Rotated Vertical Arcade Screen
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# INPUT FULL RESOLUTION | |
# BASED ON HORIZONTAL LAYOUT X/Y | |
FULL_RESOLUTION_X=1920 | |
FULL_RESOLUTION_Y=1080 | |
# INPUT CROPPED RESOLUTION - NOT ROTATED | |
# CROPPED_RESOLUTION_X=1400 | |
# CROPPED_RESOLUTION_Y=1080 | |
# ROTATION=normal | |
# INPUT CROPPED RESOLUTION | |
# BASED ON ROTATED VERTICAL LAYOUT X/Y | |
CROPPED_RESOLUTION_X=1080 | |
CROPPED_RESOLUTION_Y=1480 | |
ROTATION=left | |
# Ensure cropped resolution is a multiple of 8 to prevent possible resizing issues | |
CROPPED_RESOLUTION_X=$(($CROPPED_RESOLUTION_X/8*8)) | |
CROPPED_RESOLUTION_Y=$(($CROPPED_RESOLUTION_Y/8*8)) | |
# X Offset: Shift to right side | |
# OFFSET_X=$(($CROPPED_RESOLUTION_X - $FULL_RESOLUTION_X)) | |
# Y Offset: Shift to bottom | |
# OFFSET_Y=$(($CROPPED_RESOLUTION_Y - $FULL_RESOLUTION_Y)) | |
# WHEN ROTATED | |
# X Offset: Centered | |
OFFSET_X=$((($FULL_RESOLUTION_Y - $CROPPED_RESOLUTION_X)/2)) | |
# Y Offset: Centered | |
OFFSET_Y=$((($FULL_RESOLUTION_X - $CROPPED_RESOLUTION_Y)/2)) | |
# X Offset: Shift to left side | |
# OFFSET_X=0 | |
# Y Offset: Shift to top | |
# OFFSET_Y=0 | |
# Customize if desired | |
# OFFSET_X=0 | |
OFFSET_Y=400 | |
# Resolution as "XxY" strings | |
FULL_RESOLUTION="$FULL_RESOLUTION_X"x"$FULL_RESOLUTION_Y" | |
CROPPED_RESOLUTION="$CROPPED_RESOLUTION_X"x"$CROPPED_RESOLUTION_Y" | |
# Apply to the first connected device | |
#OUTPUT_DEVICE=$(xrandr | grep -e " connected [^(]" | sed -e "s/\([A-z0-9]\+\) connected.*/\1/") | |
OUTPUT_DEVICE=HDMI-A-0 | |
# Generate a modeline for the cropped resolution | |
CROPPED_MODELINE=$(cvt $CROPPED_RESOLUTION_X $CROPPED_RESOLUTION_Y | grep Modeline | cut -d' ' -f3-) | |
# Debug information | |
echo | |
echo "------------------------------------------------------------------------------------------------------------------------------" | |
echo "Full Resolution: $FULL_RESOLUTION" | |
echo "Cropped Resolution: $CROPPED_RESOLUTION" | |
echo "X Offset: $OFFSET_X" | |
echo "Y Offset: $OFFSET_Y" | |
echo "Output Device: $OUTPUT_DEVICE" | |
echo "Cropped Modeline: $CROPPED_MODELINE" | |
echo "------------------------------------------------------------------------------------------------------------------------------" | |
echo "xrandr --newmode $CROPPED_RESOLUTION $CROPPED_MODELINE" | |
echo "xrandr --addmode $OUTPUT_DEVICE $CROPPED_RESOLUTION" | |
echo "xrandr --output $OUTPUT_DEVICE --fb $CROPPED_RESOLUTION --panning $CROPPED_RESOLUTION --mode $CROPPED_RESOLUTION" | |
echo "xrandr --fb $CROPPED_RESOLUTION --output $OUTPUT_DEVICE --mode $FULL_RESOLUTION --transform 1,0,$OFFSET_X,0,1,$OFFSET_Y,0,0,1 --rotate $ROTATION" | |
echo | |
echo | |
# Create a new mode for the cropped resolution | |
xrandr --newmode $CROPPED_RESOLUTION $CROPPED_MODELINE | |
# Add the new mode to the output device | |
xrandr --addmode $OUTPUT_DEVICE $CROPPED_RESOLUTION | |
# Apply the new mode to the output device | |
xrandr --output $OUTPUT_DEVICE --fb $CROPPED_RESOLUTION --panning $CROPPED_RESOLUTION --mode $CROPPED_RESOLUTION | |
# Apply the new mode inside the full resolution with offsets | |
xrandr --fb $CROPPED_RESOLUTION --output $OUTPUT_DEVICE --mode $FULL_RESOLUTION --transform 1,0,$OFFSET_X,0,1,$OFFSET_Y,0,0,1 --rotate $ROTATION |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# INPUT FULL RESOLUTION - NOT ROTATED | |
FULL_RESOLUTION_X=1920 | |
FULL_RESOLUTION_Y=1080 | |
# INPUT CROPPED RESOLUTION - NOT ROTATED | |
CROPPED_RESOLUTION_X=1400 | |
CROPPED_RESOLUTION_Y=1080 | |
# Ensure cropped resolution is a multiple of 8 to prevent possible resizing issues | |
CROPPED_RESOLUTION_X=$(($CROPPED_RESOLUTION_X/8*8)) | |
CROPPED_RESOLUTION_Y=$(($CROPPED_RESOLUTION_Y/8*8)) | |
# X Offset: Shift to right side | |
# OFFSET_X=$(($CROPPED_RESOLUTION_X - $FULL_RESOLUTION_X)) | |
# Y Offset: Shift to bottom | |
# OFFSET_Y=$(($CROPPED_RESOLUTION_Y - $FULL_RESOLUTION_Y)) | |
# X Offset: Centered | |
OFFSET_X=$((($CROPPED_RESOLUTION_X - $FULL_RESOLUTION_X)/2)) | |
# Y Offset: Centered | |
OFFSET_Y=$((($CROPPED_RESOLUTION_Y - $FULL_RESOLUTION_Y)/2)) | |
# X Offset: Shift to left side | |
# OFFSET_X=0 | |
# Y Offset: Shift to top | |
# OFFSET_Y=0 | |
# Customize if desired | |
# OFFSET_X=0 | |
# OFFSET_Y=0 | |
# Resolution as "XxY" strings | |
FULL_RESOLUTION="$FULL_RESOLUTION_X"x"$FULL_RESOLUTION_Y" | |
CROPPED_RESOLUTION="$CROPPED_RESOLUTION_X"x"$CROPPED_RESOLUTION_Y" | |
# Apply to the first connected device | |
#OUTPUT_DEVICE=$(xrandr | grep -e " connected [^(]" | sed -e "s/\([A-z0-9]\+\) connected.*/\1/") | |
OUTPUT_DEVICE=HDMI-A-0 | |
# Generate a modeline for the cropped resolution | |
CROPPED_MODELINE=$(cvt $CROPPED_RESOLUTION_X $CROPPED_RESOLUTION_Y | grep Modeline | cut -d' ' -f3-) | |
# Debug information | |
echo | |
echo "------------------------------------------------------------------------------------------------------------------------------" | |
echo "Full Resolution: $FULL_RESOLUTION" | |
echo "Cropped Resolution: $CROPPED_RESOLUTION" | |
echo "X Offset: $OFFSET_X" | |
echo "Y Offset: $OFFSET_Y" | |
echo "Output Device: $OUTPUT_DEVICE" | |
echo "Cropped Modeline: $CROPPED_MODELINE" | |
echo "------------------------------------------------------------------------------------------------------------------------------" | |
echo "xrandr --newmode $CROPPED_RESOLUTION $CROPPED_MODELINE" | |
echo "xrandr --addmode $OUTPUT_DEVICE $CROPPED_RESOLUTION" | |
echo "xrandr --output $OUTPUT_DEVICE --fb $CROPPED_RESOLUTION --panning $CROPPED_RESOLUTION --mode $CROPPED_RESOLUTION" | |
echo "xrandr --fb $CROPPED_RESOLUTION --output $OUTPUT_DEVICE --mode $FULL_RESOLUTION --transform 1,0,$OFFSET_X,0,1,$OFFSET_Y,0,0,1" | |
echo | |
echo | |
# Create a new mode for the cropped resolution | |
xrandr --newmode $CROPPED_RESOLUTION $CROPPED_MODELINE | |
# Add the new mode to the output device | |
xrandr --addmode $OUTPUT_DEVICE $CROPPED_RESOLUTION | |
# Apply the new mode to the output device | |
xrandr --output $OUTPUT_DEVICE --fb $CROPPED_RESOLUTION --panning $CROPPED_RESOLUTION --mode $CROPPED_RESOLUTION | |
# Apply the new mode inside the full resolution with offsets | |
xrandr --fb $CROPPED_RESOLUTION --output $OUTPUT_DEVICE --mode $FULL_RESOLUTION --transform 1,0,$OFFSET_X,0,1,$OFFSET_Y,0,0,1 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment