Para Unity / Gnome, a posição é codificada e requer a correção da gnome-screensaver
source e sua reconstrução
Eu não espero que isso seja muito difícil
Desculpe, mas é , porque é codificado, pelo menos para o Unity e o Gnome:
- A caixa de diálogo de bloqueio e a tela de bloqueio fazem parte do pacote
gnome-screensaver
. -
A posição da caixa de diálogo é controlada por esse código na linha 1212 em
gnome-screensaver/src/gs-window-x11.c
:window->priv->lock_box = gtk_alignment_new (0.5, 0.5, 0, 0);
-
As
0.5, 0.5
são as coordenadas de centro de dimensão X e Y relativas da caixa de diálogo de bloqueio (variando de0=left/top
a1=right/bottom
). - Definir como, por exemplo
0.1, 0.9
fornece o alinhamento de baixo para a esquerda desejado. Claro, isso requer recompilar a partir da fonte: ( -
Resultado:
O patch
--- 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);
ou veja o pastebin cru
- Personalize o
0.1, 0.9
a gosto.
Para criar e instalar
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
Nenhum logout ou reinicialização é necessário. Para desinstalar , basta fazer um apt-get --reinstall install gnome-screensaver
. Você precisará repetir todo o processo de patch-build-install sempre que gnome-screensaver
for atualizado, então mantenha-o para facilitar a vida e atualizar quando estiver pronto.
Como você descobriu isso? (a pedido)
Não, eu não sou um dos desenvolvedores, mas tenho um conhecimento decente de C / C ++. Caso contrário, é tudo Google e heurística. :)
- O Google informa que não há uma maneira óbvia de responder a essa pergunta.
- Também informa que a caixa de diálogo de bloqueio é fornecida por
gnome-screensaver
- Faça o download da origem e examine. Hmm,
gs-lock-plug.c
parece interessante:-
create_page_one (GSLockPlug *plug) { GtkWidget *align; ... align = gtk_alignment_new (0.5, 0.5, 1, 1);
-
- Pode ser isso! Procure a sintaxe
gtk_alignment_new
, mude para0.1, 0.9
e reconstrua. Não funciona :( - Observe
debug-screensaver.sh
na pasta de origem, execute-a e, em seguida, bloqueie e efetue login. Saída contém:-
[find_window_at_pointer] gs-manager.c:668 (19:26:42): Requesting unlock for screen 0 [gs_window_request_unlock] gs-window-x11.c:1522 (19:26:42): Requesting unlock [window_dialog_up_changed_cb] gs-manager.c:909 (19:26:42): Handling window dialog up changed: up [handle_window_dialog_up] gs-manager.c:851 (19:26:42): Handling dialog up
-
- Veja
gs-manager.h
, que inclui:-
gboolean gs_manager_request_unlock (GSManager *manager);
-
- Examine
gs-manager.c
:-
gs_manager_request_unlock (GSManager *manager) { GSWindow * window; ... /* Find the GSWindow that contains the pointer */ window = find_window_at_pointer (manager); gs_window_request_unlock (window); }
-
-
gs_window_request_unlock
não é degs-manager
.grep -i -r -n gs_window_request .
revela:-
./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)
-
- Salte heuristicamente para a linha 1518 em
gs-window-x11.c
;gs_window_request_unlock
não ajuda diretamente, mas contém váriaswindow->priv
menções. - Veja
struct GSWindowPrivate
perto do início degs-window-x11.c
. ContémGtkWidget *lock_box
eGtkWidget *lock_socket
- Procure por ocorrências de
lock_box
no arquivo; terceiro resultado é:-
window->priv->lock_box = gtk_alignment_new (0.5, 0.5, 0, 0);
-
- Faça um pouco de dança da vitória mental, mude, construa, teste, tenha sucesso, poste resposta, edite resposta ... e ganhe recompensa? :)