我一直在尝试为SDDM配置一个新主题,但是无论我在设置窗口中进行更改还是在/etc/sddm.conf中手动进行更改,嵌入式默认问候语仍是启动时获得的默认问候语,并且默认锁屏仍然是我睡觉后得到的屏幕。我使用的是Fedora 28,KDE 5.13.5,内核4.19,试图将Chili设置为我的锁定屏幕和招呼者。通过KDE的SDDM设置GUI安装了它,检查了安装目录及其所有内容。这是我的/etc/sddm.conf:
│ File: sddm.conf
│________________________
1 │ [Autologin]
2 │ Relogin=false
3 │ Session=plasma.desktop
4 │ User=renard
5 │
6 │ [General]
7 │ Numlock=on
8 │ HaltCommand=
9 │ RebootCommand=
10 │
11 │ [Theme]
12 │ Current=plasma-chili
13 │ CursorTheme=Adwaita
14 │
15 │ [Users]
16 │ MaximumUid=65000
17 │ MinimumUid=1000
使用sddm-greeter --test-mode --theme /usr/share/sddm/themes/plasma-chili/
时主题也可以正常工作。我无法访问似乎正常的/ var / lib / ssdm,并且在任何地方都没有sddm.conf.d文件夹。更令人困惑的是,这是我来这里之前已经读过的一个问题,而且我已经看到2014年以后的人们也遇到了同样的问题,但是我找不到任何解决方法。
答案 0 :(得分:0)
它实际上并不会忽略它,或者说:它很复杂。
我遇到了同样的问题,所以我检查了它的工作原理:
在sddm源文件daemon/PowerManager.cpp
中列出了多个后端,应如何处理关闭或重新启动按钮,只有其中一个使用HaltCommand
中的/etc/sddm.conf
。
对于shutdown / HaltCommand,相关功能是powerOff()。
那么,powerOff()的实际作用是什么?
/************************************************/
/* POWER MANAGER BACKEND */
/************************************************/
virtual void powerOff() const = 0;
/**********************************************/
/* UPOWER BACKEND */
/**********************************************/
// comment from me: some reference to org.freedesktop.UPower"
void powerOff() const {
QProcess::execute(mainConfig.HaltCommand.get()); // <---------------
}
/**********************************************/
/* LOGIN1 && ConsoleKit2 BACKEND */
/**********************************************/
void powerOff() const {
m_interface->call(QStringLiteral("PowerOff"), true);
}
/**********************************************/
/* POWER MANAGER */
/**********************************************/
void PowerManager::powerOff() const {
if (daemonApp->testing())
return;
for (PowerManagerBackend *backend: m_backends) {
if (backend->capabilities() & Capability::PowerOff) {
backend->powerOff();
break;
}
}
}
sddm.conf
被读入mainConfig
,因此mainConfig.HaltCommand
保留了/etc/sddm.conf
中的该命令,当您按下屏幕上的按钮时,您非常渴望执行该命令。
我不知道HaltCommand
中的/etc/fstab
是否正在开发中,最终将在每个后端中实现,还是文档被破坏了,因为它没有提及只能用于特定的后端...
我没有遍历整个代码,所以甚至有可能这样做的目的是,如果在sddm.conf中显示了HaltCommand,则无论后端如何,都应执行该命令,只有它们无法解决实施它,否则他们会随着时间而忘记它。
我正在将Debian Stretch与systemd一起使用,所以我很确定,我有LOGIN1 && ConsoleKit2后端。这不是很理想,至少我现在知道我没有弄乱配置,相反,我想要的东西无法通过sddm调整来完成...
注意:我正在使用Debian来源的sddm-0.14.0代码进行调查。我在以下位置查看了最新消息来源
看来,这段代码没有改变。
尽管我没有检查它(甚至不确定如何操作),但看来,如果切换到UPower
后端,则会获得HaltCommand
功能。
在我看来,只要用户将默认值更改为if
,所有后端中的几个HaltCommand
-都会起到使用Current
的作用。
在此过程中,请检查最新资源中的 Section(Theme,
Entry(ThemeDir, QString, _S(DATA_INSTALL_DIR "/themes"), _S("Theme directory path"));
Entry(Current, QString, _S(""), _S("Current theme name"));
Entry(FacesDir, QString, _S(DATA_INSTALL_DIR "/faces"), _S("Global directory for user avatars\n"
"The files should be named <username>.face.icon"));
Entry(CursorTheme, QString, QString(), _S("Cursor theme used in the greeter"));
Entry(EnableAvatars, bool, true, _S("Enable display of custom user avatars"));
Entry(DisableAvatarsThreshold,int, 7, _S("Number of users to use as threshold\n"
"above which avatars are disabled\n"
"unless explicitly enabled with EnableAvatars"));
);
配置项目发生了什么。看来,它应该可以工作:
这是[theme]配置,如代码所示:
QString Display::findGreeterTheme() const {
QString themeName = mainConfig.Theme.Current.get();
// an unconfigured theme means the user wants to load the
// default theme from the resources
if (themeName.isEmpty())
return QString();
QDir dir(mainConfig.Theme.ThemeDir.get());
// return the default theme if it exists
if (dir.exists(themeName))
return dir.absoluteFilePath(themeName);
// otherwise use the embedded theme
qWarning() << "The configured theme" << themeName << "doesn't exist, using the embedded theme instead";
return QString();
}
这是实际分析和检查“当前”主题的部分,看来,它应该给您警告-也许在/var/log/sddm.log中-如果找不到它:< / p>
themePath/metadata.desktop
我在这里有点迷失了,但是看起来,如果在路径上找到了主题,那么它将在themePath
中寻找主题配置文件,或者以某种方式可以配置自定义命名主题配置文件。我认为[theme] ThemeDir
中的sddm.conf
是void Greeter::setTheme(const QString &theme) {
m_themePath = theme;
if (theme.isEmpty()) {
m_metadata->setTo(QString());
m_themeConfig->setTo(QString());
} else {
const QString path = QStringLiteral("%1/metadata.desktop").arg(m_themePath);
m_metadata->setTo(path);
QString configFile = QStringLiteral("%1/%2").arg(m_themePath).arg(m_metadata->configFile());
m_themeConfig->setTo(configFile);
}
}
中的/var/log/sddm.log
。
/var/log/syslog
所有方面,您都可以尝试研究(从解决问题到解决方法):
"The configured theme" << themeName << "doesn't exist, using the embedded theme instead"
以及themeDir
以获得此metadata.desktop
错误消息!sddm --example-config
[theme] Current
文件?如果不是,请尝试重命名/符号链接一个看起来像是主题版本的文件settings.xml
显示您当前的配置;如果它弹出artifact-id
,请在该位置复制/符号链接主题(也许备份原始主题),然后看看会发生什么情况注意:除了“此文件是否存在?”以外,我在代码中没有看到其他使用主题的条件。 -这并不意味着他们不在那里。但是,我确实看到该主题用于创建用户图标,用户界面等,因此可能由于缺少一些资源而失败了-我怀疑是这种情况,但是有可能。 / p>
虽然这不是一个完整的答案,但是我已经看过代码了,所以我尝试了一下,希望我能找到一些可以用来解决问题的东西!