屏幕保护是为了保护显示器而设计的一种专门的程序。
执行命令:qdbus com.deepin.ScreenSaver /com/deepin/ScreenSaver com.deepin.ScreenSaver.currentScreenSaver
通过Dbus com.deepin.ScreenSaver服务的下的属性 allScreenSaver 这个链表中保存了屏保名。使用 GetScreenSaverCover (String name) 方法,传入屏保名 获取屏保路径。
服务名:com.deepin.ScreenSaver
地址:/com/deepin/ScreenSaver
接口:com.deepin.ScreenSaver
GetScreenSaverCover (String name) ↦ (String imagePath)
参数:
@name 为屏保名字,如“flurry”
//服务
QString service = "com.deepin.ScreenSaver";
QString path = "/com/deepin/ScreenSaver";
QString interfaceName = "com.deepin.ScreenSaver";
//dbus连接
ComDeepinScreenSaverInterface* dbusScreenSaver = new ComDeepinScreenSaverInterface(service, path, QDBusConnection::sessionBus(), this);
//调用方法
const QStringList &saver_name_list = m_dbusScreenSaver->allScreenSaver();
for (const QString &name : saver_name_list)
const QString &cover_path = m_dbusScreenSaver->GetScreenSaverCover(name);
通过Dbus com.deepin.ScreenSaver服务的下的属性currentScreenSaver保存了当前屏保的名字
通过Dbus org.freedesktop.DBus服务下的ListActivatableNames方法可以获得当前可用的服务列表 当服务列表中不存在屏保服务com.deepin.ScreenSave时 需要屏蔽屏保功能显示。
服务名:org.freedesktop.DBus
地址:/org/freedesktop/DBus
接口:org.freedesktop.DBus
ListActivatableNames () ↦ (Array of [String] arg_0)
//服务
QString service = "org.freedesktop.DBus";
QString path = "/org/freedesktop/DBus";
QString interfaceName = "org.freedesktop.DBus";
//调用方法
QDBusMessage msg = QDBusMessage::createMethodCall(service, path, interfaceName, "ListActivatableNames");
QDBusPendingCall call = QDBusConnection::sessionBus().asyncCall(msg);
QDBusReply<QStringList> reply = call.reply();
QStringList value = reply.value();
if (value.contains("com.deepin.ScreenSaver"))
return true;
桌面提供三种方式禁用屏保:环境变量,卸载屏保,gsetting配置。
三种方式中任意一种设置为禁用屏保就会使得屏保被禁用。
在系统环境变量中添加下述值即可禁用屏保
DESKTOP_CAN_SCREENSAVER=N
sudo apt remove deepin-screensaver
使用gsettings设置show-screen-saver的值为false则禁用屏保,为true则为不禁用
gsettings set com.deepin.dde.filemanager.desktop show-screen-saver false