120Hz for Linux?

Zshrc

Member
The new M1 Pro/Max devices include a 120Hz screen. It seems to be working well with Windows VMs, but has anyone gotten it working with Linux VMs?
 
Managed to figure it out in case anyone else was trying to...
This is a fullscreen VM on a 16 inch M1 Pro running Ubuntu 20.04 in Xorg. Also works in CentOS 9 Stream.
$ cvt 4112 2572 120
$ xrandr --newmode (everything after "Modeline" from above command)
$ xrandr --addmode Virtual-1 4112x2572_120.00
$ xrandr --output Virtual-1 --mode 4112x2572_120.00
 
The 1st command worked for me but not the 2nd one. This was the output:

parallels@ubuntu-linux-20-04-desktop:~$ cvt 4112 2572 120
# 4112x2572 119.99 Hz (CVT) hsync: 330.80 kHz; pclk: 1916.00 MHz
Modeline "4112x2572_120.00" 1916.00 4112 4496 4952 5792 2572 2575 2585 2757 -hsync +vsync
parallels@ubuntu-linux-20-04-desktop:~$ xrandr --newmode
xrandr: failed to parse '(null)' as a mode specification
Try 'xrandr --help' for more information.
parallels@ubuntu-linux-20-04-desktop:~$
 
Here's a bash script to do it automatically

```
#!/bin/bash
# Usage: ./change_resolution.sh <width> <height> <refresh_rate>
# Example: ./change_resolution.sh 1800 1169 120

# Check if three arguments are provided
if [ "$#" -ne 3 ]; then
echo "Usage: $0 <width> <height> <refresh_rate>"
exit 1
fi

# Assign input parameters
width="$1"
height="$2"
refresh="$3"

# Run cvt to generate modeline information
cvt_output=$(cvt "$width" "$height" "$refresh")

# Extract the line containing "Modeline"
modeline_full=$(echo "$cvt_output" | grep "Modeline")

# Remove the word "Modeline" to get only the parameters
modeline=$(echo "$modeline_full" | sed 's/Modeline //')

# Extract the mode name (first token, removing quotes)
mode_name=$(echo "$modeline" | awk '{print $1}' | sed 's/"//g')

# Get the remaining parameters (everything after the mode name)
mode_params=$(echo "$modeline" | cut -d' ' -f2-)

# Create the new mode with xrandr using the mode name and parameters
xrandr --newmode "$mode_name" $mode_params

# Add the new mode to the output "Virtual-1"
xrandr --addmode Virtual-1 "$mode_name"

# Set the new mode on "Virtual-1"
xrandr --output Virtual-1 --mode "$mode_name"
```
 
Back
Top