Samsung Odyssey G95NC on macOS: unlocking 1920×1620 HiDPI via USB-C dock — the cable matters, not the HDMI port
Short version for people who Google'd their way here at 2am: if your Mac shows the G95NC at 2560×2160 native 1:1 (tiny text) and the Scaled menu has no 1920×1620 option, it's not the dock and not the HDMI port — it's the cable. You need a USB-C → HDMI 2.1 active cable (not DP-to-HDMI, not a generic adapter). Both HDMI-1 and HDMI-2 on the monitor work once the cable is right. Scripts + full wiring below.
You bought a Samsung Odyssey G95NC 57" Dual UHD (7680×2160, 32:9). You dock your Mac (MacBook Pro M-series) through a Thunderbolt 4/5 hub. You run it in PBP 21:9 mode so the right half is 2560×2160.
Physical pixel density at that half is crazy-high (~111 PPI over 28"). Text is unreadable without HiDPI. The natural choice is macOS's "looks like 1920×1620" scaled mode (integer 2× scaling → crisp). But in System Settings → Displays → Scaled, the option is simply not there. You get 2560×2160 native, some anemic 1080p options, and nothing in between that fills the screen.
Searching gets you:
- "Use BetterDisplay to force it" → works but a 3rd-party daemon
- "Plug via DisplayPort" → fine if you have a spare DP off your dock, but most TB docks only offer HDMI
- "It's an Apple HDMI limitation" → true but unhelpful
- "You must use HDMI-1, not HDMI-2" → this is wrong. (See below.)
Apple's display driver keeps an internal whitelist of HiDPI modes per aspect ratio, keyed on how the display identifies over the cable. Over HDMI-identified transport, macOS only offers HiDPI for 16:9 / 21:9 / 16:10 — aspect ratios that ship on actual MacBooks, iMacs, Studio Displays, XDR. The G95NC PBP half is 1.185:1 (effectively 11:9) — not on the list, so the matching HiDPI mode (1920×1620 doubled) never appears.
When the display is identified over USB-C (DisplayPort Alt Mode) instead, this whitelist is bypassed and 1920×1620 becomes available.
The trick: a proper USB-C→HDMI 2.1 active cable tells macOS "I'm a USB-C display" even though the downstream physical connector is HDMI. The monitor's EDID is still HDMI, but macOS's decision layer uses the transport, not the EDID, for the whitelist.
A unidirectional USB-C → HDMI 2.1 active cable, 48 Gbps capable. As of 2026-04:
- Cable Matters 48Gbps USB-C to HDMI 2.1 (Amazon ASIN
B0CT6CK72N, 6ft) — widely confirmed working - UGREEN equivalent (Amazon ASIN
B0BXWBSJ77, 6.6ft) — pairs well with UGREEN docks
What does NOT work:
- DisplayPort → HDMI adapters (even 4K@120 ones) — macOS still sees HDMI transport
- Thunderbolt → HDMI passive adapters — same problem
- HDMI → HDMI cables from the dock's HDMI output — same problem
- Any cable labeled "4K@60 only" — you need 8K/4K@120 class bandwidth on the USB-C side
MacBook Pro ─── TB5/TB4 ─── Dock ─── USB-C→HDMI 2.1 active cable ─── G95NC HDMI (either HDMI-1 or HDMI-2)
Tested configurations:
- MacBook Pro M4/M5 Max (Apple M4/M5 Max GPU) via UGREEN TBT5 17-in-1 Docking Station (USB4 v2, 80 Gb/s upstream)
- Both G95NC HDMI-1 and HDMI-2 ports (see "Myth buster" below)
- macOS Sonoma 14.x, Sequoia 15.x, Tahoe 26.x — all behave identically
A common forum answer says HDMI-1 works but HDMI-2 doesn't. Empirically tested 2026-04 on macOS Tahoe 26.4.1: both HDMI ports expose the 1920×1620 HiDPI mode when the cable on the dock end is the right type. The variable is the cable transport (USB-C vs DP vs passive), not the monitor-side port.
What does differ between HDMI-1 and HDMI-2 is nothing HiDPI-related on macOS. One reasonable port split if you share the monitor with another box:
| G95NC input | Used by | Why |
|---|---|---|
| HDMI-1 | Mac direct (no dock) — full 7680×2160 @ 120Hz | Only used when you want the full 32:9 single screen; no HiDPI needed at that resolution |
| HDMI-2 | Mac through dock — 2560×2160 PBP half with HiDPI 1920×1620 | Everyday productivity |
| DP-1 / DP-2 | Linux / Windows box | 5120×2160 @ 120Hz or full 7680×2160 @ 240Hz with DSC |
Install displayplacer:
brew install displayplacerThen:
displayplacer listScroll to your G95NC block. You want to see a line like:
mode XX: res:1920x1620 hz:60 color_depth:8 scaling:on
If this line is present, you're done — open System Settings → Displays → pick Scaled → "Larger Text" (macOS maps that to 1920×1620 with scaling:on). Or apply via CLI (below), bypassing the Settings app entirely.
If the line is not present, your cable is still being identified as pure HDMI. Swap to a real USB-C→HDMI 2.1 active cable.
Grab your monitor's persistent screen id from displayplacer list (looks like 2567A1C1-6F55-4E5B-A774-833F5AFAA4D9). Then save this script:
~/bin/g95nc-dock-hidpi.sh
#!/bin/bash
# Set G95NC (via USB-C→HDMI 2.1 dock cable) to 1920x1620 HiDPI @60Hz.
# Idempotent: re-running won't cycle the display if already in the target mode.
set -eu
DP=/opt/homebrew/bin/displayplacer
G95NC_ID="REPLACE_WITH_YOUR_PERSISTENT_ID" # from `displayplacer list`
MODE="res:1920x1620 hz:60 color_depth:8 enabled:true scaling:on origin:(0,0) degree:0"
if ! "$DP" list 2>/dev/null | grep -q "$G95NC_ID"; then
echo "[g95nc-hidpi] G95NC not connected, skipping." >&2
exit 0
fi
"$DP" "id:$G95NC_ID $MODE"chmod +x ~/bin/g95nc-dock-hidpi.sh
~/bin/g95nc-dock-hidpi.shmacOS usually remembers per-display mode choices, but after OS updates, dock firmware updates, or swapping cables, it occasionally reverts to 2560×2160 native. Belt-and-suspenders: run the script on every login.
~/Library/LaunchAgents/com.user.g95nc-hidpi.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.user.g95nc-hidpi</string>
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>-c</string>
<string>sleep 5; $HOME/bin/g95nc-dock-hidpi.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StandardOutPath</key>
<string>/tmp/g95nc-hidpi.log</string>
<key>StandardErrorPath</key>
<string>/tmp/g95nc-hidpi.log</string>
</dict>
</plist>Load it:
launchctl load ~/Library/LaunchAgents/com.user.g95nc-hidpi.plistThe 5s sleep lets Thunderbolt enumeration complete before the script polls displayplacer list on login.
The G95NC has a built-in USB hub that follows your video input (selected under OSD → Source → USB Source Setup). Occasionally — on firmware 1009.2 as of this writing — the USB hub stops following the video switch: video goes to Mac, USB hub stays on Linux/Windows, your keyboard/mouse disappears from the machine you're looking at.
Fix: toggle the OSD input source to something else, then back. Do NOT crawl under the desk checking cables — it's the monitor's state machine, not your wiring.
CLI fallback if you have ddcutil on Linux and the G95NC on DP:
ddcutil --sleep-multiplier 2 setvcp 0x60 0x12 # switch to HDMI-2
sleep 2
ddcutil --sleep-multiplier 2 setvcp 0x60 0x0f # switch back to DPNote: Samsung VCP code 0xE3 (USB Source Setup) is a private/undocumented opcode — you cannot set USB routing directly over DDC/CI. The video-input toggle is the working workaround.
If you're using the G95NC with a Linux workstation too: 240Hz over DisplayPort works, but took until nvidia-driver-580 + kernel 6.11 to get fully stable. The critical missing piece was Display Stream Compression (DSC) handling on NVIDIA — fixed upstream in nvidia issue #816 (closed 2026-02).
Working config (Ubuntu 24.04 + GNOME 46):
xrandr DP-0 mode: 5120x2160 @120Hz (PBP half)
or 7680x2160 @240Hz (full 32:9, requires DSC)
No xorg.conf tweaks needed on recent drivers. GNOME mutter picks the right mode from ~/.config/monitors.xml at login.
| Item | Why | Example |
|---|---|---|
| USB-C → HDMI 2.1 active cable | Unlocks 1920×1620 HiDPI menu on macOS | Cable Matters B0CT6CK72N, UGREEN B0BXWBSJ77 |
| Thunderbolt 4 or TB5 dock with HDMI out | Delivers USB-C upstream to Mac | UGREEN TBT5 17-in-1, CalDigit TS4, OWC TB4 Hub |
displayplacer |
Verify mode + apply from CLI | brew install displayplacer |
Every 6 months I see another post on r/G9Odyssey, the BetterDisplay issue tracker, or MacRumors asking the same question and getting partially-correct answers. The most common partial answer is "use HDMI-1 not HDMI-2" — that answer happens to work because the person who figured it out was swapping cables at the same time, and attributed success to the port instead of the cable. This gist is the distilled fix: it's the cable transport, not the port.
If this saved you a night of frustration, a star on the gist is nice — but even better, link it in the next forum thread you see asking the same question.
- waydabber/BetterDisplay issue #4129 — community discussion that traced the HDMI aspect-ratio whitelist
- jakehilborn/displayplacer — the CLI used in these scripts
- Samsung G95NC firmware 1009.2 release notes — confirms USB Source Setup behavior
Tested 2026-04-20 on: MacBook Pro (M-series) + UGREEN TBT5 Dock + Samsung Odyssey G95NC (fw 1009.2) + macOS Tahoe 26.4.1.
The G95NC's rear CoreSync+ lighting turns out to be reachable over plain DDC/CI, through three manufacturer-specific VCP codes the monitor never advertises in its capabilities string:
| VCP | Meaning | Range | Writable |
|---|---|---|---|
0xF8 |
lighting source: 0x00 off, 0x01 manual, 0x03 CoreSync |
max 17 | only 0x00 / 0x01 |
0xF9 |
effect mode | max 5 | yes, in manual |
0xFA |
colour | max 51 | yes, in colour-capable modes |
Effect modes map 1:1 onto the OSD list (Settings → All Settings → Game → Core Lighting, not the Game quick bar):
0 Aurora · 1 Aurora Rotation · 2 Comet* · 3 Static* · 4 Rainbow · 5 Breathing*
(* = has a colour option)
The colour palette in the OSD is a 13 × 4 grid, and 0xFA is simply its row-major index:
index = row * 13 + column (0-based)
top-left 0 · top-right 12 · bottom-left 39 · bottom-right 51
# pink breathing
ddcutil --bus 17 setvcp 0xF9 5
ddcutil --bus 17 setvcp 0xFA 24"CoreSync only works over HDMI." It does not. CoreSync is greyed out in the OSD unless the effect mode is Static. That, not the cable, is why owners keep finding it unavailable. This panel is on DisplayPort and CoreSync enables fine from Static.
"If the register accepts the write, it works." Not on this panel. Several registers accept writes with no visible effect. Confirm with your eyes.
CoreSync itself is read-only. setvcp 0xF8 0x03 fails verification, and once CoreSync is active
(set from the OSD) all three codes lock read-only until you turn it off there. You can detect
CoreSync from software; you cannot set it.
Also worth knowing: the OSD palette only writes 0xFA when you press Done, so arrowing across
swatches changes nothing. And the monitor restores your mode and colour by itself after an
off/on cycle, so there is no need to save and replay them.
Full method, the register walk, the five-point verification of the palette formula, and a reference script: https://gist.github.com/genedeng-ca/5ac2fb01ed7764c4122e1d2eef354414