Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save cephalization/83cc2e3c59cb2bded9159be481e63483 to your computer and use it in GitHub Desktop.

Select an option

Save cephalization/83cc2e3c59cb2bded9159be481e63483 to your computer and use it in GitHub Desktop.

Apple Studio Display Setup on Arch Linux with Hyprland

Problem Description

Apple Studio Display (5K) on Arch Linux with Hyprland was experiencing intermittent connection issues where:

  • Display would not always connect reliably
  • System detected the display as two separate devices
  • Wrong display connector was sometimes chosen

System

  • Framework 13 w/ AMD hx370
  • Radeon 890M
  • Caldigit TS4 w/ thunderbolt 4 cable
  • Apple Studio Display (connected to TS4)

Root Cause Analysis

The issue was caused by Multi-Stream Transport (MST) behavior where the 5K Apple Studio Display appears as two logical displays:

  • DP-6: 5120x2880@60Hz (full 5K resolution) - the correct one to use
  • DP-5: 2560x2880@60Hz (half-width secondary stream) - causes confusion

The generic Hyprland monitor configuration monitor=,preferred,auto,auto was allowing the system to randomly choose between these connectors, leading to unreliable behavior.

Solution

1. Install bolt package

2. Identify Active Connectors

When the display is connected (unplug cable from display, not dock, until it appears), run hyprctl monitors to identify which DP connectors are active.

3. Configure Hyprland Monitors

Edit ~/.config/hypr/monitors.conf with explicit connector configuration:

# See https://wiki.hyprland.org/Configuring/Monitors/
# List current monitors and resolutions possible: hyprctl monitors
# Format: monitor = [port], resolution, position, scale
# You must relaunch Hyprland after changing any envs (use Super+Esc, then Relaunch)

# Apple Studio Display - MST fix
# The display appears as two connectors due to Multi-Stream Transport
# We want the full 5K resolution (DP-6) and disable the partial one (DP-5)

env = GDK_SCALE,2

# Internal laptop display
monitor = eDP-1, 2880x1920@120, 0x0, 2

# Apple Studio Display - use the full 5K connector
monitor = DP-6, 5120x2880@60, 2880x0, 2

# Disable the secondary MST stream that causes confusion
monitor = DP-5, disabled

# Disable any other potential connectors
monitor = DP-1, disabled
monitor = DP-2, disabled  
monitor = DP-3, disabled
monitor = DP-4, disabled
monitor = DP-7, disabled
monitor = DP-8, disabled

3. Apply Configuration

Restart Hyprland using Super+EscRelaunch

Key Configuration Points

  1. Use DP-6 explicitly - This provides the full 5120x2880@60Hz resolution
  2. Disable DP-5 - This prevents the system from using the partial MST stream
  3. Disable unused connectors - Prevents random selection of wrong ports
  4. Explicit positioning - Places Studio Display to the right of laptop screen

Hardware Details

  • System: Arch Linux with Hyprland
  • Graphics: AMD Radeon 880M/890M (Strix)
  • Internal Display: 2880x1920@120Hz (eDP-1)
  • External Display: Apple Studio Display 5120x2880@60Hz (DP-6)

Verification

After applying the configuration:

  • The Apple Studio Display should connect reliably on every plug-in
  • Only one logical display should appear for the Studio Display
  • Display should maintain proper 5K resolution (5120x2880)

Troubleshooting

If issues persist:

  1. Check which DP connector is active with hyprctl monitors
  2. Verify connector status with DRM commands above
  3. Ensure the correct connector (showing full 5K resolution) is specified in config
  4. Remember to restart Hyprland after config changes
@cephalization
Copy link
Author

Once everything is working you can set brightness to 100% using the asdcontrol package.

sudo asdcontrol --detect /dev/usb/hiddev*
# some value gets detected as apple studio display, like /dev/usb/hiddev6
sudo asdcontrol /dev/usb/<detected hiddev value> 100%

@melpomene
Copy link

My experience is that the display will change id (DP-6, DP-5 etc) depending on some randomness in boot order and also which port it gets connected to. I had to match the default display on the specs instead if the id and then write a monitoring script that finds and disables the second phantom monitor.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment