Wie verschiebe ich das Sperrfenster auf dem Sperrbildschirm?


7

Ist es möglich, das Fenster, in dem Sie Ihr Passwort auf dem Sperrbildschirm eingegeben haben, von der Mitte weg zu verschieben, z. B. am unteren Rand?

Antworten:


22

Für Unity / Gnome ist die Position fest codiert und erfordert das Patchen gnome-screensaverund Wiederherstellen der Quelle

Ich erwarte nicht, dass dies sehr schwierig wird

Tut mir leid, aber es ist , weil es fest codiert ist, zumindest für Unity und Gnome:

  • Der Sperrdialog und der Sperrbildschirm sind Teil des gnome-screensaverPakets.
  • Die Position des Dialogs wird über dieses Codebit in / um Zeile 1212 in gesteuert gnome-screensaver/src/gs-window-x11.c:

        window-> priv-> lock_box = gtk_alignment_new (0.5, 0.5, 0, 0);
    
  • Das 0.5, 0.5ist die relative X- und Y-Dimension Mittelpunktskoordinaten des Verriegelungs Dialogs ( im Bereich von 0=left/topan 1=right/bottom).

  • Wenn Sie es auf z. B. 0.1, 0.9einstellen, erhalten Sie die gewünschte Ausrichtung unten links. Dies erfordert natürlich eine Neukompilierung aus der Quelle :(
  • Ergebnis:

    Geben Sie hier die Bildbeschreibung ein älterer Widescreen-Screenshot


Der Patch

--- gnome-screenaver-3.4.1.orig / src / gs-window-x11.c 2012-06-04 18: 14: 11.000000000 -0700
+++ gnome-screenaver-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);

oder siehe roher Pastebin

  • Passen Sie das 0.1, 0.9nach Geschmack an.

Zu bauen und zu installieren

sudo apt-get install build-essential dpkg-dev
sudo apt-get build-dep gnome-bildschirmschoner
mkdir gssrc && cd gssrc
apt-get source gnome-bildschirmschoner
wget -Olockbox-left.patch http://pastebin.com/raw.php?i=pqDYRrW1
patch -i lockbox-left.patch
cd gnome-screenaver-3.4.1
dpkg-source --commit
dpkg-buildpackage -us -uc
cd ..
sudo dpkg -i gnome-screenaver_3.4.1-0ubuntu1_ {i386 | amd64} .deb
cd ..
rm -rf gssrc
killall / usr / bin / gnome-Bildschirmschoner

Kein Abmelden oder Neustart erforderlich. Zum Deinstallieren einfach eine apt-get --reinstall install gnome-screensaver. Sie müssen den gesamten Patch-Build-Installationsprozess bei jeder gnome-screensaverAktualisierung wiederholen. Halten Sie ihn also gedrückt, um das Leben zu vereinfachen, und aktualisieren Sie ihn, wenn Sie bereit sind.


Wie haben Sie das herausgefunden? (auf Anfrage)

Nein, ich bin nicht einer der Entwickler, aber ich habe gute Kenntnisse in C / C ++. Ansonsten ist alles Google und Heuristik. :) :)

  1. Google sagt Ihnen, dass es keine offensichtliche Möglichkeit gibt, diese Frage zu beantworten.
  2. Außerdem erfahren Sie, dass der Sperrdialog von bereitgestellt wird gnome-screensaver
  3. Quelle herunterladen und untersuchen. Hmm, gs-lock-plug.chört sich interessant an:
    • create_page_one (GSLockPlug * Plug)
      {
      GtkWidget * align;
      ...
      align = gtk_alignment_new (0,5, 0,5, 1, 1);
      
  4. Das könnte es sein! Nachschlagen gtk_alignment_newSyntax, Änderung 0.1, 0.9und wieder aufzubauen. Funktioniert nicht :(
  5. Beachten Sie debug-screensaver.shim Quellordner, führen Sie ihn aus, sperren Sie ihn und melden Sie sich an. Die Ausgabe enthält:
    • [find_window_at_pointer] gs-manager.c: 668 (19:26:42): Freischaltung für Bildschirm 0 anfordern
      [gs_window_request_unlock] gs-window-x11.c: 1522 (19:26:42): Freischaltung anfordern
      [window_dialog_up_changed_cb] gs-manager.c: 909 (19:26:42): Die Behandlung des Fensterdialogs wurde geändert: up
      [handle_window_dialog_up] gs-manager.c: 851 (19:26:42): Dialog wird bearbeitet
      
  6. Schauen Sie sich an gs-manager.h, was beinhaltet:
    • gboolean gs_manager_request_unlock (GSManager *manager);
  7. Untersuchen gs-manager.c:
    • gs_manager_request_unlock (GSManager * Manager)
      {
      GSWindow * -Fenster;
      ...
      / * Finde das GSWindow, das den Zeiger enthält * /
      window = find_window_at_pointer (Manager);
      gs_window_request_unlock (Fenster);
      }}
      
  8. gs_window_request_unlockist nicht von gs-manager. grep -i -r -n gs_window_request .enthüllt:
    • ./gs-manager.c:1353: gs_window_request_unlock (Fenster);
      ./gs-window.h:92:void gs_window_request_unlock (GSWindow * -Fenster);
      ./test-window.c:66: gs_window_request_unlock (Fenster);
      ./gs-window-x11.c:1518:gs_window_request_unlock (GSWindow * -Fenster)
      
  9. Heuristisch zur Linie 1518 in springen gs-window-x11.c; gs_window_request_unlockhilft nicht direkt, enthält aber eine Reihe von window->privErwähnungen.
  10. Schauen Sie sich am struct GSWindowPrivateAnfang von an gs-window-x11.c. Es enthält GtkWidget *lock_boxundGtkWidget *lock_socket
  11. Suche nach Vorkommen lock_boxin der Datei; Das dritte Ergebnis ist:
    • window->priv->lock_box = gtk_alignment_new (0.5, 0.5, 0, 0);
  12. Tanzen, ändern, bauen, testen, erfolgreich sein, Antworten posten, Antworten bearbeiten ... und Kopfgeld gewinnen? :) :)

Sehr gut! Habe es noch nicht ausprobiert, klingt aber echt ;-) Kannst du mir sagen, wie du das herausgefunden hast, oder bist du einfach der Entwickler dafür?
Psirus

1
Siehe umfangreiche Änderungen :)
ish

Wow, tolle Arbeit! Dies ist weitaus umfangreicher als ich es mir erhofft hatte. Vielen Dank. Und ja, diese Antwort verdient das Kopfgeld, das Sie bekommen haben.
Psirus
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.