/display-mode: разрешение экрана Мака
Утилита: display_mode.c рядом с этим файлом (CoreGraphics, 0 LLM, без brew). Описание флагов и обе ловушки записаны в шапке исходника.
Портируемость. Родился на Intel Mac Pro (macOS 15, 4K monitor), там проверен. Apple Silicon: тот же API, должен собраться, не проверялся. Windows: веток нет, сделай ChangeDisplaySettingsEx через PowerShell Add-Type. Linux: xrandr --output <имя> --mode 1920x1080.
Шаг 1. Собрать (один раз на узел)
mkdir -p ~/.claude/scripts/bin && clang -O2 -framework ApplicationServices -o ~/.claude/scripts/bin/display_mode ~/.claude/skills/display-mode/display_mode.c && ~/.claude/scripts/bin/display_mode --selftest
SELFTEST OK обязателен. Swift не бери: на том Mac Pro он не совпадает с SDK и падает.
Шаг 2. Посмотреть режимы
~/.claude/scripts/bin/display_mode
Колонки W H PW PH HZ, звёздочка = текущий. W H = как выглядит интерфейс. PW = 2×W значит чёткий HiDPI (тяжело для удалёнки). PW = W значит настоящее разрешение, видеокарте и AnyDesk в 4 раза легче.
Шаг 3. Выбрать и поставить
Всегда все четыре числа, сперва pick (экран не трогает), потом set:
~/.claude/scripts/bin/display_mode pick 1600 900 1600 60
~/.claude/scripts/bin/display_mode set 1600 900 1600 60
set печатает строку отката ДО смены, пишет режим навсегда, перечитывает экран до 2 секунд и печатает OK или MISMATCH. Коды выхода: 0 = ок · 1 = нет режима / ошибка CoreGraphics / не встал · 2 = мусор в аргументах (60Hz, abc) · 3 = неоднозначно (две строки одинаково близки, смотри список). HZ пиши как в списке: 60, 59.875; берётся ближайшая частота, а не первая. Строку отката отдай оператору.
«Уменьши ещё» = следующая ступень вниз в том же формате, что сейчас (16:9 → 16:9). 4:3 (1600×1200, 1280×960) на широком мониторе растягивает картинку, бери только по прямой просьбе.
Лесенка 16:9 на 4K-мониторе: 1920×1080 → 1600×900 → 1344×756 → 1280×720 → 1024×576.
Шаг 4. Доказать вторым способом
system_profiler SPDisplaysDataType | grep -E 'Resolution|UI Looks'
screencapture -x "$TMPDIR/s.png" && sips -g pixelWidth -g pixelHeight "$TMPDIR/s.png"
Оба обязаны показать выбранный размер.
Ловушки (первые две пойманы вживую, остальные нашла панель внешних моделей)
- Выбор по
ioDisplayModeID: у «1920×1080 настоящий» и «960×540 HiDPI» один ID, ставится огромный интерфейс.
- Выбор без высоты: при ширине 1600 первым находится 1600×1200 (4:3), картинка растянута.
- Округление частоты: на 4K-мониторе у 1280×720 HiDPI есть 59.875 и 60, и 59.875 стоит в списке первым; округлённый выбор на «60» ставил 59.875.
- Два режима с одной четвёркой и разной высотой в пикселях: выбор отказывает (exit 3), а не берёт первый.
- Мусор в числах раньше молча становился 60 или 0.
Все пять сидят в --selftest. Если убрать из выбора высоту, PW или проверку неоднозначности, самотест краснеет.
Чего не умеет
Только главный экран. Перезагрузку не проверяли: режим ставится как постоянный (kCGConfigurePermanently), а переживёт ли он перезапуск, не доказано.
<!--kit-footer-->
Like this skill? It is one of 100 in second-brain-starter-kit: the second brain we built for ourselves and run every day at Palo Alto AI Research Lab. Install the whole set with npx skills add tonydzi/second-brain-starter-kit. Everything is open source and free, so take what you need.
Flagships worth a look on their own: secondop-panel (a second opinion from a panel of external models), claude-memory-tidy (stop your agent's memory from rotting), telegram-mcp-kit (your own Telegram over MCP in about 15 minutes).
Author: Anton Dziatkovskii, Palo Alto AI Research Lab. Telegram @tonydzi - WhatsApp +1 341 222 9178 - X @Tony_Stef_
Engineers: want to test-drive this setup? Message me. I hand out free starter seeds to engineers who test and report back, and custom skill requests are welcome.