如何在锁定屏幕上移动锁定窗口?
是否可以将锁定屏幕上输入密码的窗口移离中心,例如在下边缘?
对于Unity / Gnome,该位置是硬编码的,需要修补gnome-screensaver
源并重建它
我不认为这很困难
对不起,但它是 ,因为它是硬编码的,至少对于Unity和Gnome来说:
- 锁定对话框和锁定屏幕是
gnome-screensaver
包的一部分。 -
对话框的位置通过
gnome-screensaver/src/gs-window-x11.c
第1212行/周围的代码来控制:window-> priv-> lock_box = gtk_alignment_new(0.5,0.5,0,0);
-
0.5,0.5是锁定对话框的相对X和Y维中心坐标(范围从
0=left/top
到1=right/bottom
)。 - 将其设置为例如
0.1, 0.9
得到所需的左下对齐。 当然,这需要从源代码重新编译:( -
结果:
旧的宽屏截图
补丁
--- gnome-screensaver-3.4.1.orig / src / gs-window-x11.c 2012-06-04 18:14:11.000000000 -0700 +++ gnome-screensaver-3.4.1 / src / gs-window-x11.c 2012-06-04 18:14:36.972433823 -0700 @@ -1209,7 +1209,7 @@ guint32 id) { window-> priv-> lock_socket = gtk_socket_new(); - window-> priv-> lock_box = gtk_alignment_new(0.5,0.5,0,0); + window-> priv-> lock_box = gtk_alignment_new(0.1,0.9,0,0); gtk_widget_show(window-> priv-> lock_box); gtk_box_pack_start(GTK_BOX(window-> priv-> vbox),window-> priv-> lock_box,TRUE,TRUE,0);
或看到原始的pastebin
- 定制
0.1, 0.9
来品尝。
构建和安装
sudo apt-get install build-essential dpkg-dev sudo apt-get build-dep gnome-screensaver mkdir gssrc && cd gssrc apt-get source gnome-screensaver wget -Olockbox-left.patch http://pastebin.com/raw.php?i=pqDYRrW1 patch -i lockbox-left.patch cd gnome-screensaver-3.4.1 dpkg-source --commit dpkg-buildpackage -us -uc cd .. sudo dpkg -i gnome-screensaver_3.4.1-0ubuntu1_ {i386 | amd64} .deb cd .. rm -rf gssrc killall / usr / bin / gnome-screensaver
无需注销或重新启动。 要卸载 ,只需执行apt-get --reinstall install gnome-screensaver
。 每当gnome-screensaver
更新时,您都需要重复整个补丁构建安装过程,因此请保持它以使生活更轻松,并在您准备好后进行更新。
你是怎么想到的? (按要求)
不,我不是开发人员之一,但我对C / C ++有很好的了解。 否则,它就是谷歌和启发式。 🙂
- 谷歌告诉你没有明显的方法来回答这个问题。
- 它还告诉你锁定对话框是由
gnome-screensaver
提供的 - 下载源代码并进行检查 嗯,
gs-lock-plug.c
听起来很有趣:-
create_page_one(GSLockPlug *插件) { GtkWidget *对齐; ... align = gtk_alignment_new(0.5,0.5,1,1);
-
- 那可能是它! 查找
gtk_alignment_new
语法,更改为gtk_alignment_new
并重建。 不起作用:( - 请注意源文件夹中的
debug-screensaver.sh
,运行它,然后锁定并登录。 输出包含:-
[find_window_at_pointer] gs-manager.c:668(19:26:42):请求屏幕0解锁 [gs_window_request_unlock] gs-window-x11.c:1522(19:26:42):请求解锁 [window_dialog_up_changed_cb] gs-manager.c:909(19:26:42):处理窗口对话框改变了:up [handle_window_dialog_up] gs-manager.c:851(19:26:42):处理对话框
-
- 看看
gs-manager.h
,其中包括:-
gboolean gs_manager_request_unlock (GSManager *manager);
-
- 检查
gs-manager.c
:-
gs_manager_request_unlock(GSManager * manager) { GSWindow *窗口; ... / *找到包含指针的GSWindow * / window = find_window_at_pointer(manager); gs_window_request_unlock(window); }
-
-
gs_window_request_unlock
不是来自gs-manager
。grep -i -r -n gs_window_request .
揭示了:-
./gs-manager.c:1353:gs_window_request_unlock(window); ./gs-window.h:92:void gs_window_request_unlock(GSWindow * window); ./test-window.c:66:gs_window_request_unlock(window); ./gs-window-x11.c:1518:gs_window_request_unlock(GSWindow * window)
-
- 尝试跳到
gs-window-x11.c
第1518行;gs_window_request_unlock
没有直接帮助,但包含许多gs_window_request_unlock
window->priv
mentions。 - 查看
gs-window-x11.c
开头附近的struct GSWindowPrivate
gs-window-x11.c
。 它包含GtkWidget *lock_box
和GtkWidget *lock_socket
- 在文件中搜索
lock_box
出现次数; 第三个结果是:-
window->priv->lock_box = gtk_alignment_new (0.5, 0.5, 0, 0);
-
- 做一点精神上的胜利舞蹈,改变,建立,测试,成功,发布答案,编辑答案……并赢得赏金? 🙂