Further improvements to display setting scripts
This commit is contained in:
@@ -75,28 +75,60 @@ if ([ "X${SUNSHINE_CLIENT_WIDTH:-}" != "X" ] && [ "X${SUNSHINE_CLIENT_HEIGHT:-}"
|
|||||||
|
|
||||||
# Get the modeline from cvt and extract the second line (which contains the modeline)
|
# Get the modeline from cvt and extract the second line (which contains the modeline)
|
||||||
__client_modeline=$(cvt "${SUNSHINE_CLIENT_WIDTH:?}" "${SUNSHINE_CLIENT_HEIGHT:?}" "${SUNSHINE_CLIENT_FPS:?}" | grep Modeline | sed -e 's/Modeline //')
|
__client_modeline=$(cvt "${SUNSHINE_CLIENT_WIDTH:?}" "${SUNSHINE_CLIENT_HEIGHT:?}" "${SUNSHINE_CLIENT_FPS:?}" | grep Modeline | sed -e 's/Modeline //')
|
||||||
|
|
||||||
# Create a new mode for this. This allows us to force a set refresh rate that may not be supported by the display
|
# Create a new mode for this. This allows us to force a set refresh rate that may not be supported by the display
|
||||||
__client_mode=$(echo "${__client_modeline:?}" | awk -F '"' '{print $2}')
|
__client_mode=$(echo "${__client_modeline:?}" | awk -F '"' '{print $2}')
|
||||||
|
|
||||||
# Check if tthis mode is alread added to the primary display
|
# Check if this custom mode is already created
|
||||||
if ! echo "${__xrandr_out:?}" | grep -q "${__client_mode:?}"; then
|
if ! echo "${__xrandr_out:?}" | grep -q "${__client_mode:?}"; then
|
||||||
|
# Custom mode does not yet exist. Create it
|
||||||
echo " - Adding new mode '${__client_mode:?}' with new modeline '${__client_modeline:?}'"
|
echo " - Adding new mode '${__client_mode:?}' with new modeline '${__client_modeline:?}'"
|
||||||
xrandr --newmode "${__client_mode:?}" ${__client_modeline##*\"}
|
xrandr --newmode "${__client_mode:?}" ${__client_modeline##*\"}
|
||||||
echo " - Adding new mode '${__client_mode:?}' to device '${__primary_output:?}'"
|
if [ $? -gt 0 ]; then
|
||||||
xrandr --addmode "${__primary_output:?}" "${__client_mode:?}"
|
echo " - WARNING: Failed to add new mode '${__client_mode:?}'."
|
||||||
__mode_added=$?
|
else
|
||||||
|
echo " - SUCCESS"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo " - Custom mode '${__client_mode:?}' already exists."
|
||||||
|
fi
|
||||||
|
# Check if custom mode exists
|
||||||
|
if echo "${__xrandr_out:?}" | grep -q "${__client_mode:?}"; then
|
||||||
|
# Check if this mode is already added to the primary display
|
||||||
|
if ! echo "${__xrandr_out:?}" | sed -n "/${__primary_output:?}/,/^[^[:space:]]/ {/^[[:space:]]/p}" | grep -q "${__client_mode:?}"; then
|
||||||
|
# Custom mode exists, but is not yet added to the primary output device. Add it
|
||||||
|
echo " - Adding custom mode '${__client_mode:?}' to device '${__primary_output:?}'"
|
||||||
|
xrandr --addmode "${__primary_output:?}" "${__client_mode:?}"
|
||||||
|
__mode_added=$?
|
||||||
|
if [ "${__mode_added:-0}" -gt 0 ]; then
|
||||||
|
echo " - WARNING: Failed to assign custom mode to primary output device '${__primary_output:?}'."
|
||||||
|
else
|
||||||
|
echo " - SUCCESS"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo " - Custom mode '${__client_mode:?}' is already configured for the primary output device."
|
||||||
|
__mode_added=0
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo " - WARNING: Custom mode '${__client_mode:?}' does not exist."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Set the current resoultion to the new mode
|
# Set the current resoultion to the new mode
|
||||||
if [ "${__mode_added:-0}" -gt 0 ]; then
|
if ([ "X${__mode_added:-}" = "X" ] || [ "${__mode_added:-0}" -gt 0 ]); then
|
||||||
echo " - Attempting to set the display mode to a supported '${SUNSHINE_CLIENT_WIDTH:?}x${SUNSHINE_CLIENT_HEIGHT:?}' mode"
|
echo " - Attempting to set the display mode to a supported '${SUNSHINE_CLIENT_WIDTH:?}x${SUNSHINE_CLIENT_HEIGHT:?}' mode. Note that this may not support the configured refresh rate."
|
||||||
xrandr --output "${__primary_output:?}" --mode ${SUNSHINE_CLIENT_WIDTH:?}x${SUNSHINE_CLIENT_HEIGHT:?} --refresh ${SUNSHINE_CLIENT_FPS:?}
|
xrandr --output "${__primary_output:?}" --mode ${SUNSHINE_CLIENT_WIDTH:?}x${SUNSHINE_CLIENT_HEIGHT:?} --refresh ${SUNSHINE_CLIENT_FPS:?}
|
||||||
[ $? -eq 0 ] && echo " - SUCCESS"
|
if [ $? -gt 0 ]; then
|
||||||
|
echo " - WARNING: Failed to set current output to mode '${SUNSHINE_CLIENT_WIDTH:?}x${SUNSHINE_CLIENT_HEIGHT:?}' on device '${__primary_output:?}'."
|
||||||
|
else
|
||||||
|
echo " - SUCCESS"
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
echo " - Setting the display mode to '${__client_mode:?}'"
|
echo " - Setting the display mode to '${__client_mode:?}'"
|
||||||
xrandr --output "${__primary_output:?}" --mode "${__client_mode:?}" --rate "${SUNSHINE_CLIENT_FPS:?}"
|
xrandr --output "${__primary_output:?}" --mode "${__client_mode:?}" --rate "${SUNSHINE_CLIENT_FPS:?}"
|
||||||
[ $? -eq 0 ] && echo " - SUCCESS"
|
if [ $? -gt 0 ]; then
|
||||||
|
echo " - WARNING: Failed to set current output to custom mode '${__client_mode:?}' on device '${__primary_output:?}'."
|
||||||
|
else
|
||||||
|
echo " - SUCCESS"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Save original display settings to config file. This will be read and used to restore the original display settings when the client disconnects.
|
# Save original display settings to config file. This will be read and used to restore the original display settings when the client disconnects.
|
||||||
|
|||||||
Reference in New Issue
Block a user