ОС

Логирование в GNOME Shell 48: расширения на X11 с journalctl

Как правильно логировать сообщения в расширении GNOME Shell 48 на X11 с помощью log() и console.log(). Фильтрация логов journalctl по _GNOME_SHELL_EXTENSION_UUID или grep. Почему не работает фильтр и альтернативы вроде gnome-shell --replace для отладки.

Как логировать сообщения конкретно для расширения GNOME Shell в GNOME 48 (X11)?

Я разрабатываю расширение GNOME Shell 48 под названием restore-mpv-by-blueray453 в сессии X11. Я пробовал логировать сообщения с помощью как log("Ваше сообщение здесь"), так и console.log("Ваше сообщение здесь"), но когда я пытаюсь отфильтровать логи для моего расширения с помощью:

journalctl -f -o cat GNOME_SHELL_EXTENSION_UUID=restore-mpv-by-blueray453

ничего не появляется в выводе.

Мне нужно иметь возможность логировать сообщения только из моего расширения для более удобной отладки. Я использую именно GNOME Shell 48 с X11, и уже пробовал оба метода: log() и console.log().

Какой правильный подход к логированию сообщений конкретно для расширения GNOME Shell, и почему мой текущий метод фильтрации может не работать?

В GNOME 48 для логирования сообщений в расширении GNOME Shell под X11 используйте log("сообщение") или console.log("сообщение") прямо в коде — они автоматически пишутся в журнал gnome-shell. Фильтруйте логи командой journalctl -f -o cat _COMM=gnome-shell | grep restore-mpv-by-blueray453 или journalctl -f GNOME_SHELL_EXTENSION_UUID=restore-mpv-by-blueray453, добавив подчёркивание перед полем. Ваш текущий фильтр не срабатывает, потому что journalctl требует точного синтаксиса с _ для системных полей, а без grep или правильного поля ничего не ловит.


Содержание


Логирование в GNOME 48: что изменилось

GNOME 48 принёс удобный API для логирования в расширениях Shell. Раньше отладка была морокой — приходилось рыться в общих логах или использовать хаки. Теперь log() и console.log() пишут прямо в journalctl от процесса gnome-shell. Это работает из коробки, без лишних настроек.

Почему это круто? Представьте: вы пишете log("Расширение restore-mpv-by-blueray453 загружено") в коде, и сообщение появляется в логах с меткой вашего UUID. Фильтровать потом — раз плюнуть. Согласно 9to5Linux, это convenience logging API, специально для разработчиков расширений. Логи идут в systemd journal, привязанные к _GNOME_SHELL_EXTENSION_UUID.

Но подождите, GNOME 48 всё ещё свежий (альфа на момент написания в 2025, но стабильный к 2026). Если вы на X11, это не меняет сути — логи одинаково удобны.


Правильный синтаксис log() и console.log()

В вашем расширении restore-mpv-by-blueray453 просто вставляйте эти вызовы где нужно. Пример:

javascript
log("Начинаем восстановление MPV окна");
console.log("Детали: позиция " + x + ", " + y);

Оба метода идентичны: выводят в stdout gnome-shell, который journalctl ловит. Нет разницы между ними — выбирайте по вкусу. TechBloat подтверждает: log('Текст') или console.log() появляются в journalctl /usr/bin/gnome-shell.

Важно: вызывайте их в контексте расширения (imports.gi, extension.js). Если в worker’е или отдельном акторе — проверьте, что процесс тот же. Работает на X11 без проблем, Wayland не мешает.

А что если ничего не видно? Сначала убедитесь, что расширение активно: gnome-extensions list --enabled.


Фильтрация логов journalctl для конкретного расширения

Вот рабочие команды для вашего случая. Запускайте в терминале параллельно с тестированием расширения:

  1. Базовый grep по UUID (самый надёжный):
journalctl -f -o cat _COMM=gnome-shell | grep restore-mpv-by-blueray453

Почему _COMM=gnome-shell? Это фильтрует только логи от gnome-shell процесса.

  1. По полю расширения (GNOME 48 фича):
journalctl -f GNOME_SHELL_EXTENSION_UUID=restore-mpv-by-blueray453

Или с -o cat для чистоты:

journalctl -f -o cat GNOME_SHELL_EXTENSION_UUID=restore-mpv-by-blueray453
  1. Для пользователя (если системные логи не те):
journalctl --user -f -o cat /usr/bin/gnome-shell | grep restore-mpv-by-blueray453

ItsFoss рекомендует именно такой подход: реал-тайм логи с grep. А SysAdminSage добавляет: поле GNOME_SHELL_EXTENSION_UUID ставится автоматически Shell’ом.

Тестируйте: вызовите log() в расширении — увидите сразу.


Почему ваш фильтр не работает

Ваша команда journalctl -f -o cat GNOME_SHELL_EXTENSION_UUID=restore-mpv-by-blueray453 почти верна, но сломана в мелочах. Главная проблема: отсутствует подчёркивание перед полем. Journalctl ожидает системные поля с _, как _GNOME_SHELL_EXTENSION_UUID=. Без него фильтр игнорирует.

Ещё нюансы:

  • UUID точно restore-mpv-by-blueray453? Проверьте в metadata.json или gnome-extensions info.
  • Логи пишутся только когда расширение активно. Если disabled — тишина.
  • -o cat урезает метки, но без grep может пропустить, если строка не exact match.

На Reddit обсуждают похожие краши gjs-console, где journalctl -e или -b 0 показывает детали. Ваш случай проще — просто синтаксис.

Быстро фикс: добавьте _ и grep. Работает на лету.


Альтернативы для X11: gnome-shell --replace

X11 даёт бонус: запустите gnome-shell --replace & в терминале. Shell перезапустится, и все логи, включая log() вашего расширения, польются прямо в терминал. Нет journalctl — чистый stdout.

Плюсы: мгновенно, видно всё. Минусы: Shell моргнёт, не для продакшена. SysAdminSage хвалит это для X11-отладки.

Комбо: запустите --replace, протестируйте, потом Ctrl+C и вернитесь к journalctl. Идеально для быстрого дебаггинга restore-mpv-by-blueray453.


Проверка UUID расширения и логов

Сначала убедитесь в UUID:

gnome-extensions info restore-mpv-by-blueray453

Или гляньте ~/.local/share/gnome-shell/extensions/restore-mpv-by-blueray453/metadata.json — uuid там.

Общие логи gnome-shell:

journalctl -u gnome-shell -f

Ищите ошибки вроде “extension failed to load”. Если gjs-console крашит — как на Reddit, смотрите journalctl -b 0.

Всё готово? Теперь log() полетит targeted.


Дополнительные советы по отладке

  • Релод расширения: gnome-extensions disable restore-mpv-by-blueray453 && gnome-extensions enable restore-mpv-by-blueray453. Логи всплывут при reload.
  • GJS дебаг: GJS_DEBUG_TOPICS=Gjs=debug gjs -m your-extension.js для изоляции.
  • Looking Glass: Alt+F2, r — перезагрузка Shell без --replace.
  • Если ничего: обновите до свежей GNOME 48 (2026 — точно есть stable).

Хотите автоматизировать? Скрипт: watch -n 1 'journalctl -f -o cat _COMM=gnome-shell | grep restore-mpv-by-blueray453 -m1'. Но journalctl с -f хватит.

Это покрывает 99% кейсов. Удачи с MPV-реставрацией!


Источники

  1. ItsFoss: gnome-extensions CLI и логи
  2. SysAdminSage: Установка и отладка расширений GNOME
  3. TechBloat: Полный гайд по GNOME Shell extensions
  4. 9to5Linux: Новинки GNOME 48 Alpha
  5. Reddit r/gnome: Отладка gjs-console крашей

Заключение

Для GNOME 48 на X11 логируйте через log() или console.log() в расширении restore-mpv-by-blueray453 — это стандарт. Фикс фильтра: journalctl -f -o cat _COMM=gnome-shell | grep <UUID> или с _GNOME_SHELL_EXTENSION_UUID=. Ваш метод падал на синтаксисе, но теперь отладка targeted и удобная. Для X11 добавьте gnome-shell --replace — увидите всё в реал-тайм. Соберите пазл, и дебаг полетит.

Авторы
Проверено модерацией
Модерация
Логирование в GNOME Shell 48: расширения на X11 с journalctl