12个版本
0.2.1 | 2020年1月4日 |
---|---|
0.2.0 | 2019年6月11日 |
0.1.9 | 2016年8月24日 |
0.1.4 | 2016年7月26日 |
#302 in GUI
33 每月下载量
140KB
3.5K SLoC
ScreenRuster
一个X11屏幕保护程序和锁定器。
安装
要安装守护进程,您需要一个nightly Rust工具链,然后您可以使用Cargo安装它
cargo install screenruster
完成后,您可以在 $XDG_CONFIG_HOME/screenruster/config.toml
($XDG_CONFIG_HOME
默认为 ~/.config/
) 创建一个配置文件,或者从 assets/config.toml
复制一个。
屏幕保护程序必须位于 $PATH
中,并且可执行文件名必须以 screenruster-saver-
开头。
可以使用Cargo安装一个示例屏幕保护程序
cargo install screenruster-saver-laughing_man
示例配置文件已经为其设置了默认设置。
用法
首先,启动守护进程。
screenruster daemon &
然后如果您想手动激活屏幕保护程序
screenruster activate
或者如果您想手动锁定
screenruster lock
要解锁,只需输入您的密码并按回车键。
授权
授权由各种模块处理,每个模块都尝试进行身份验证,第一个成功的身份验证将解锁屏幕。
内部
内部模块使用配置文件中指定的密码,这最初是为了测试而制作的,您可能不应该使用它。
[auth.internal]
password = "password"
PAM
此模块使用可插拔身份验证模块进行身份验证,您需要在 /etc/pam.d/screenruster
中为其安装一个配置文件。
auth include system-auth
如果您希望PAM账户管理受到尊重,请确保使用具有 auth-pam-accounts
特性的构建。
可用的屏幕保护程序
这是一个随时间更新的可用屏保列表,如果您制作了屏保并希望添加到此列表,只需发起一个pull request。
- Laughing Man 来自《攻壳机动队: Stand Alone Complex》
- XScreensaer & XLock 支持
为什么?
因为我想要制作一个花哨的屏保,而使用xscreensaver
可能比从头开始制作更痛苦。
为什么我要用这个而不是xscreensaver
?
如果您喜欢冒险,并想使用一个没有像xscreensaver
那样经过充分测试的屏锁。
或者如果您喜欢为ScreenRuster
制作的任何屏保。
理论上,由于它使用Rust编写并且架构与xscreensaver
略有不同,ScreenRuster
应该比xscreensaver
更安全,这进一步减少了攻击面。
实际上,ScreenRuster
仍然很年轻,并且在使用PAM
(但是它足够小,足以保证安全)的地方有一些不安全代码。
为什么我要用这个而不是gnome-screensaver
?
因为ScreenRuster
仍然比gnome-screensaver
更安全,并且它实现了相同的DBus接口,因此它应该能够在GNOME环境的其余部分中正常工作。
但说实话,现在就使用xscreensaver
,任何东西都比gnome-screensaver
好。
架构
架构大致遵循xscreensaver,因为这是最佳方法,保持屏幕锁定简单,将花哨的图形委托给一个单独的进程,这使得有缺陷的屏保不会使整个锁定机制崩溃,从而保护免受漏洞的侵害。
屏保可以用任何可以绘制到X11窗口、解析和生成JSON、写入stdout
和从stdin
读取的语言编写。
JSON用于在守护程序和屏保之间进行IPC,守护程序将数据写入屏保进程的stdin
,从进程的stdout
读取,并将来自stderr
的任何内容转发,以便进行调试或记录。
屏保的工作仅仅是进行渲染,这包括任何淡入/淡出或对话框,这进一步减少了锁定程序的攻击面。注意屏保实际上不获取输入,它只获取Insert
或Delete
事件,因此它可以填充其对话框。
协议
协议是基于行的,其中每行包含一个JSON编码的消息,每个消息都有一个type
字段,包含消息的名称,参数是同一对象上的属性。
请求
请求是从守护程序发送到派生的屏保进程的消息。
配置
配置请求是握手的一部分,并且是当进程被派生时发送的第一个请求。
配置是单一的,并由守护程序在TOML文件中管理,相关的TOML映射被转换为JSON并发送给屏保。
type
="config"
config
=Object
目标
目标请求是握手的一部分,是在进程启动时发送的第二次请求。
它包含了获取X11窗口所需的所有详细信息,包括显示名称、屏幕编号和窗口XID
。
type
="target"
display
=String
screen
=Integer
window
=Integer
调整大小
当锁定窗口调整大小时,会发送调整大小请求,这可能会在XRandr用于更改分辨率或旋转屏幕时发生。
type
="resize"
width
=Integer
height
=Integer
节流
当省电程序应该尝试减少功耗时,会发送节流请求。
type
="throttle"
throttle
=Boolean
空白
当屏幕被清除或恢复时,会发送空白请求。
type
="blank"
throttle
=Boolean
指针
当在省电窗口上发生指针事件时,会发送指针请求。
type
="pointer"
move
=Object { x, y }
button
=Object { x, y, button, press }
密码
当任何授权相关更改发生时,会发送密码请求,这包括字符被插入或删除、密码正在检查或授权失败或成功。
type
="password"
password
="insert"
、"delete"
、"reset"
、"check"
、"success"
、"failure"
开始
当省电程序应该开始渲染时,会发送开始请求,这可能包括淡入或其他特效。
type
="start"
锁定
当屏幕被锁定时,会发送锁定请求,这可以用来渲染通知屏幕当前已锁定。
类型
="锁定"
停止
当保存器应停止渲染时发送停止请求,这可能包括淡出或其他精美图形。
类型
="停止"
响应
响应是从派生的保存器进程发送到守护进程的消息。
初始化
在完成握手并且保存器准备好开始后发送初始化响应,因为精美图形可能需要加载纹理等,保存器被给予一些准备渲染的余地。
类型
="初始化"
开始
在收到开始请求并开始渲染后发送开始响应,它告诉守护进程可以显示窗口。
类型
="开始"
停止
在收到停止请求并停止渲染后发送停止响应,它告诉守护进程可以隐藏窗口。
依赖项
~10-21MB
~306K SLoC