XScreenSaver

来自 ArchWiki

XScreenSaver 是一个带有图形效果的屏幕保护程序和屏幕锁。X Window 系统默认具有功能性的屏幕保护(在电源管理意义上)。

安装

安装 xscreensaver 软件包。

为了获得 Arch Linux 品牌体验,请安装 xscreensaver-arch-logoAUR 软件包。

配置

大多数选项都在用户基础上通过运行 xscreensaver-settings 进行配置。xscreensaver-settings 将选择的配置写入 ~/.xscreensaver,丢弃对该文件的任何手动修改。全局选项在 /usr/lib/X11/app-defaults/XScreenSaver 中定义。

至少从 XScreenSaver 5.22 开始,还有另一种编辑 XScreenSaver 用户配置的方法,即使用 X 资源

主题

从 6.0 版本开始,XScreenSaver 带有几个预装主题。您可以使用 xscreensaver-settings 选择主题,或者通过更改 dialogTheme 选项(~/.xscreensaver 中的 dialogTheme: 主题名称 或使用 X 资源:xscreensaver-auth.dialogTheme: 主题名称)。

您可以使用 X 资源自定义主题。下面的示例演示了更改一些颜色和字体。如果您使用的是非默认主题,请将 default 替换为您选择的主题名称(小写),或使用问号 (?) 来影响所有主题

~/.Xresources
! Font for regular texts.
! Font names are case-insensitive.
! You can use a comma-separated list of fonts to set a fallback font.
xscreensaver-auth.default.Dialog.bodyFont: times new roman 12, dejavu serif 12

! Window background color. You can use color names.
xscreensaver-auth.default.Dialog.background: black

! Main text color. You can also use HEX color codes.
xscreensaver-auth.default.Dialog.foreground: #ffffff

您可以在 /usr/share/X11/app-defaults/XScreenSaver 中查看可用 X 资源的列表。

不要忘记在更改后重新加载资源文件

DPMS 和屏幕空白设置

本文或章节需要语言、wiki 语法或风格上的改进。请参阅 Help:Style 以供参考。

原因: “覆盖 DPMS” 很模糊——xscreensaver 执行了相当于 xset s 0 0 的操作,使用自己的计时器进行各种动画,但将 DPMS 超时设置为显示电源管理中的值。(在 Talk:XScreenSaver 中讨论)

XScreenSaver 独立于 X 本身管理屏幕空白和显示节能 (DPMS) 并覆盖它。要配置空白、待机、显示器断电等的时间,请使用 xscreensaver-demo 或手动编辑配置文件,例如 ~/.xscreensaver

timeout:	1:00:00
cycle:		0:05:00
lock:		False
lockTimeout:	0:00:00
passwdTimeout:	0:00:30
fade:		True
unfade:		False
fadeSeconds:	0:00:03
fadeTicks:	20
dpmsEnabled:	True
dpmsStandby:	2:00:00
dpmsSuspend:	2:00:00
dpmsOff:	4:00:00

可以通过启动 xscreensaver-demo 并为模式设置选择禁用屏幕保护程序来禁用 DPMS 和屏幕空白。

注意: 如果 xscreensaver-demo 中的锁定屏幕时间被勾选并设置为 0 分钟,屏幕将在空白后立即锁定。如果电源管理器已启用未勾选,则 DPMS 被禁用;这并不意味着 XScreenSaver 将放弃对 DPMS 设置的控制。

用法

提示: 要在没有启动画面的情况下启动 XScreenSaver,请使用 --no-splash 开关。有关完整选项列表,请参阅 xscreensaver(1)

XfceLXDELXQt 环境中,如果 XScreenSaver 可用,则会自动启动 - 无需进一步操作。

KDE Plasma 中,屏幕保护程序和锁定器功能由 ksmserver 处理,这与 XScreenSaver 冲突。要禁用它,您需要为 KDE 启用 systemd 启动,然后编辑 plasma-ksmserver.service 用户单元

~/.config/systemd/user/plasma-ksmserver.service.d/override.conf
[Service]
ExecStart=
ExecStart=/usr/bin/ksmserver --no-lockscreen

然后注销并重新登录,XScreenSaver 现在应该可以正常工作了。有关更多信息,请参阅 xscreensaver(1) § 在 KDE 上安装 XSCREENSAVER

对于其他环境,请参阅 自动启动

要立即触发 xscreensaver(如果正在运行)并锁定屏幕,请执行以下命令

$ xscreensaver-command -lock

挂起时锁定

XScreenSaver 附带一个名为 xscreensaver-systemd 的小程序,它使用 D-Bus 处理来自 systemdPrepareForSleep 信号,并在挂起和休眠时自动锁定屏幕。它与 xscreensaver 一起自动启动,无需进一步操作。有关更多信息,请参阅 xscreensaver-systemd(6)

但是,它不处理其他 systemd 信号,例如 loginctl lock-session。要处理它,您可以使用 xss-lock。使用 --ignore-sleep 选项,因为挂起/休眠事件已由 xscreensaver-systemd 处理。

$ xss-lock --ignore-sleep -- xscreensaver-command -lock

您可能希望将 XScreenSaver 的淡出时间设置为 0。

从锁屏切换用户

警告: 当使用显示管理器(如 GDM 或 LightDM)切换用户时,XScreenSaver 不会锁定原始会话——只需将 TTY 切换到相关会话即可在无需密码的情况下访问它。如果您使用的是 LightDM,作为一种解决方法,请安装 light-locker 并与 XScreenSaver 一起运行。或者,完全使用不同的屏幕锁定程序——请参阅 应用程序列表/安全#屏幕锁

默认情况下,XScreenSaver 锁屏中的新登录按钮将调用 gdmflexiserver -ls 来切换用户。支持用户切换的 显示管理器GDM 除外)需要不同的命令。

提示:xscreensaver-auth.default.*.newLoginCommand: 添加到 ~/.Xresources,同时将参数留空,将使新登录按钮消失。

由于 ~/.xscreensaver 中的修改会被 xscreensaver-settings 丢弃,因此本节中使用 ~/.Xresources

LXDM

要使用 LXDM 的切换模式

xscreensaver-auth.default.*.newLoginCommand: lxdm -c USER_SWITCH

LightDM

要使用 LightDM 的切换模式

xscreensaver-auth.default.*.newLoginCommand: dm-tool switch-to-greeter
注意: 如果您使用此功能切换到已登录的用户,您可能需要输入两次密码(一次用于 LightDM,一次用于您登录用户的 XScreenSaver 对话框)。

SDDM

SDDM 不支持用户切换。[1] 您可以尝试调用 SwitchToGreeter 方法 使用 dbus-send,但这可能无法正常工作。

技巧与窍门

在媒体播放期间禁用

从 5.45 版本开始,xscreensaver-systemd 实用程序实现了 D-Bus ScreenSaver 接口。它与 xscreensaver 一起自动启动,因此大多数应用程序应该无需额外配置即可正确禁用屏幕保护程序。但是,某些应用程序不支持 D-Bus 或使用其他接口。

mpv

默认情况下,mpv 使用 X11 屏幕保护程序扩展 (XSS)。它在启动时关闭屏幕保护程序,并在退出时再次打开。当播放器暂停时,屏幕保护程序始终重新启用。可以在位于 ~/.config/mpv/mpv.confmpv 配置文件中控制该选项

stop-screensaver = "yes"

并非所有视频输出或平台都支持此功能。如果您遇到一些问题,您可以使用 Lua 脚本手动禁用屏幕保护程序。在 ~/.config/mpv/scripts/xscreensaver.lua 创建一个文件,内容如下

local utils = require 'mp.utils'
mp.add_periodic_timer(30, function()
    utils.subprocess({args={"xscreensaver-command", "-deactivate"}})
end)

上面的脚本将每 30 秒调用一次 xscreensaver-command -deactivate

mplayer

将以下内容添加到 ~/.mplayer/config

heartbeat-cmd="xscreensaver-command -deactivate >&- 2>&- &"

Kodi

Kodi 没有原生支持来禁用 XScreenSaver(它使用自己的屏幕保护程序)。安装 kodi-prevent-xscreensaverAUR 软件包作为解决方法,或尝试来自 https://sourceforge.net/projects/osscreensavermanager/ 的 Kodi 扩展。

浏览器 HTML5 视频

大多数浏览器(Chromium 和基于 Chromium 的衍生产品、FirefoxGNOME WebOtter Browser 等)都支持 D-Bus ScreenSaver 接口,并且应该在 HTML5 视频播放期间禁用屏幕保护程序。

其他应用

如果您使用的应用程序未禁用屏幕保护程序,您可以尝试一个名为 lightsonplus 的脚本,该脚本在检测到全屏视频时禁用屏幕保护程序。某些应用程序(例如 totemSteam 等)开箱即用,您只需在 lightson+ 脚本中启用它们的检测即可。如果您的应用程序不受支持但具有永久窗口名称,您可以在 window_name 变量中设置它。

动画壁纸

可以像壁纸一样在后台运行 xscreensaver。首先,杀死任何正在控制背景(根窗口)的进程。

然后,找到所需的 XScreenSaver 可执行文件(通常在 /usr/lib/xscreensaver/ 中),并使用 -root 标志运行它,例如

$ /usr/lib/xscreensaver/glslideshow -root &
注意: 如果 xcompmgrpicom 导致问题,请安装 shantz-xwinwrap-bzrAUR 软件包,并运行
$ xwinwrap -b -fs -sp -nf -ov -- /usr/lib/xscreensaver/glslideshow -root -window-id WID &

故障排除

要记录详细的调试信息,请使用 --verbose 命令行选项启动 xscreensaver。您还可以将 verbose: True 添加到 ~/.xscreensaver 文件以使其持久化。

要将日志保存到文件,您可以使用 --log 选项设置路径。使用此选项也意味着详细输出。(在 ~/.xscreensaver 或 X 资源中没有等效选项)。

参见