LINUX.ORG.RU

Как можно отредактировать тему менеджера входа SDDM методом WYSIWYG?

 , , , ,


0

0

Есть ли WYSIWYG способ редактирования тем SDDM? Как понимаю, в SDDM для тем применяют техн. QML. Я попытался импортирать файлы темы breeze в QtCreator, но при Build получаю вот такие ошибки:

file:///home/user/test_001/Main.qml:408:5: QML Connections: Cannot assign to non-existent property "onLoginSucceeded"
file:///home/user/test_001/Main.qml:408:5: QML Connections: Cannot assign to non-existent property "onLoginFailed"
file:///home/user/test_001/components/VirtualKeyboard.qml:20:1: module "QtQuick.VirtualKeyboard" is not installed
file:///home/user/test_001/Login.qml:84:9: QML Connections: Cannot assign to non-existent property "onLoginFailed"
file:///home/user/test_001/SessionButton.qml:38: ReferenceError: sessionModel is not defined
file:///home/user/test_001/KeyboardButton.qml:18: ReferenceError: keyboard is not defined
file:///home/user/test_001/KeyboardButton.qml:29:44: Unable to assign [undefined] to QString
file:///home/user/test_001/KeyboardButton.qml:28:23: Unable to assign [undefined] to QString
file:///home/user/test_001/SessionButton.qml:49:23: Unable to assign [undefined] to QString
file:///home/user/test_001/Main.qml:54: ReferenceError: screenModel is not defined
file:///home/user/test_001/Main.qml:70: ReferenceError: config is not defined
file:///home/user/test_001/Main.qml:104: ReferenceError: config is not defined
file:///home/user/test_001/Login.qml:85: ReferenceError: sddm is not defined
file:///home/user/test_001/Main.qml:165: ReferenceError: userModel is not defined
file:///home/user/test_001/Main.qml:193: ReferenceError: sddm is not defined
file:///home/user/test_001/Main.qml:200: ReferenceError: sddm is not defined
file:///home/user/test_001/Main.qml:207: ReferenceError: sddm is not defined
file:///home/user/test_001/Main.qml:167: TypeError: Cannot call method 'hasOwnProperty' of undefined
file:///home/user/test_001/Main.qml:164: ReferenceError: userModel is not defined
file:///home/user/test_001/Main.qml:163: ReferenceError: userModel is not defined
file:///home/user/test_001/KeyboardButton.qml:24: ReferenceError: keyboard is not defined
file:///home/user/test_001/KeyboardButton.qml:13: TypeError: Cannot read property 'shortName' of null
file:///home/user/test_001/SessionButton.qml:45: ReferenceError: sessionModel is not defined
file:///home/user/test_001/SessionButton.qml:35: TypeError: Cannot read property 'text' of null
file:///home/user/test_001/Main.qml:409: ReferenceError: sddm is not defined
11:38:04: /usr/bin/qmlscene exited with code 0
При этом запускается просмотр темы, все элементы на своих местах но из-за белого фона их практически не видно. Пока не разобрался, почему не получается загрузить фоновое изображение или как изменить цвет фона. Ну и самое главное - не работает режим Design в QtCreator. При попытке на него переключиться, спустя некоторое время появляется диалоговое окно с сообщением: ссылка на скриншот. И снова перебрасывает в режим Edit. Пробовал менять вот эти настроки QML Emulation Layer - не помогло, все та же ошибка.

Быстрый гугл говорит, что твои пропущенные переменные объявлены тут: https://github.com/sddm/sddm/blob/develop/src/greeter/GreeterApp.cpp#L173

В QML есть два способа пробросить зависимости. Изнутри через явный импорт модуля в самом .qml-файле, тогда модуль получается самодостаточным. Или снаружи, через предварительную регистрацию типов и переменных в контексте где-то там до загрузки в этот самый контекст модуля (в данном случае наш модуль это тема SDDM). Это и есть твой случай. Другими словами, тема будет работать только есть запустится из приложения из-под sddm-greeter, а не через qmlscene. Как-то так судя под исходнику: sddm-greeter --test-mode --theme=/path/to/your/local/copy/of/breeze/theme.

WYSIWYG у тебя всё равно не получится, поскольку исходники тем пишутся в тексте QML. Но это и не должно быть проблемой, там кода кот наплакал и он достаточно читаем.

Dendy ★★★★★ ()
Ответ на: комментарий от Dendy

Ух и не простой для меня ваш ответ, так как я далеко не специалист в таких тонкостях как проброс зависимостей, регистрация типов и переменных в контексте и т. п. Как я понял по тем ошибкам и из вашего ответа, в теме содержатся те компоненты и их свойства, которых нет в qmlscene. И если бы sddm-greeter был реализован в виде модуля (плагина) который мог импортироваться в начале Main.qml файла темы, этих ошибок не было.

WYSIWYG у тебя всё равно не получится, поскольку исходники тем пишутся в тексте QML.

Да, более детально просмотрев, вижу что код набран «вручную», в смысле есть комментарии, которые исправляют некоторое поведение стандартных Qt компонентов. Да и вообще, много комментариев с тем, что именно происходит с поведением темы. А мне казалось, что к темам применяется более простой способ позиционирования элементов и отладка их поведения.

tersion ()
Ответ на: комментарий от tersion

И если бы sddm-greeter был реализован в виде модуля (плагина) который мог импортироваться в начале Main.qml файла темы, этих ошибок не было.

Всё верно. Но этому есть объяснение — тема это не самостоятельное приложение, поэтому там импорты и не нужны. Тема используется только в контексте конкретного загрузчика.

А что именно хотелось исправить в breeze?

Dendy ★★★★★ ()
Ответ на: комментарий от Dendy

В принципе я уже разобрался с тем что мне хотелось сделать, но напишу о том, из-за чего я полез в файлы .qml темы. Все началось с того, что у меня после установки Arch Linux с KDE, sddm имел тему по умолчанию - maui. При этом, использовался какой-то шрифт из семейства моноширинных, помоему Hack. В самом KDE у меня исп. семейство шрифтов Noto. Я решил сменить тему на breeze, через sddm-kcm, но и в ней был шрифт Hack. Вот тут я и стал копаться, где в теме это можно изменить. Но оказалось, что конкретно в дефолтной теме breeze нет явной возможности изменить шрифт. Ко всему прочему нашел вот такое обсуждение от 2016 года, на github'e sddm, после которого стало ясно - шрифт, когда sddm запущен от root'a, нужно задать или глобально в /etc/fonts/local.conf, либо прописать в самой теме, что было сделано одним человеком. Теперь основная начальная проблема была решена, шрифт изменен на Noto, но его размер был великоват. С размером я так-же разобрался, добавив pointSize в нужных местах. После всего этого задался вопросом, почему все столь неочевидно и нет ли более простого, WYSIWYG способа для решения подобных задач.

tersion ()
Ответ на: комментарий от tersion

В данном случае sddm ничем не отличается от обычного приложения. Если вопрос стоит как есть ли в QML инструменты для WYSIWYG, то ответ да, но их использование затруднительно по известным причинам. К примеру, можно ли считать правку CSS-стилей страницы в developer-режиме броузера WYSIWYG-редактором? С одной стороны вроде как сразу видишь как будет выглядеть результат, а с другой все твои изменения канут в лету при следующем обновлении страницы — нужно перехардкодить подобранные значения в исходный код.

То же и с QML, исходный код которого пишет человек в текстовом виде, потому что, к примеру, font.family должен быть задан где-то в глобальном конфиге, а все контролы будут к нему биндиться. Размеры шрифтов тоже скорее всего будут вычисляться на лету, учитывая DPI и прочие параметры экрана.

Dendy ★★★★★ ()