Как переместить окно блокировки на экран блокировки?

Используйте эту команду в терминале, чтобы объединить два отдельных «.mkv-файла» в один.

mkvmerge -o newfile.mkv part1.mkv +part2.mkv
7
задан 5 June 2012 в 07:55

7 ответов

Для Unity / Gnome позиция жестко закодирована и требует исправления источника gnome-screensaver и восстановления его

Я не ожидаю, что это будет очень сложно

Извините, но это потому, что он жестко закодирован, по крайней мере для Unity и Gnome:

Диалог блокировки и блокировка являются частью пакета gnome-screensaver. Положение диалога контролируется с помощью этого бита кода на линии 1212 в строке gnome-screensaver/src/gs-window-x11.c: 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);

или см. Raw pastebin

Диалоговое окно блокировки и блокировка являются частью пакета gnome-screensaver.

Чтобы установить и установить

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. Вам нужно будет повторить весь процесс установки патчей-build-install всякий раз, когда обновляется gnome-screensaver, поэтому держите его, чтобы сделать жизнь проще и обновить, когда вы

Как вы это поняли? (по запросу)

Нет, я не один из разработчиков, но у меня есть достойное знание C / C ++. В противном случае это все Google и эвристика.:)

Google говорит вам, что нет очевидного способа ответить на этот вопрос. Он также сообщает вам, что диалог блокировки предоставляется gnome-screensaver. Загрузите источник и проверьте. Хм, gs-lock-plug.c звучит интересно: create_page_one (GSLockPlug *plug) { GtkWidget *align; ... align = gtk_alignment_new (0.5, 0.5, 1, 1); Это может быть так! Найдите синтаксис gtk_alignment_new, перейдите в 0.1, 0.9 и перестройте. Не работает :( Обратите внимание на debug-screensaver.sh в исходной папке, запустите его, а затем заблокируйте и зайдите в систему. Вывод содержит: [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 Посмотрите на gs-manager.h, который включает в себя: gboolean gs_manager_request_unlock (GSManager *manager); Изучить 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); } [ f26] не из 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) Эвристический переход к строке 1518 в gs-window-x11.c, gs_window_request_unlock не помогает напрямую, но содержит ряд window->priv упоминаний. Посмотрите на 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); Сделайте немного умственного танца победы, измените, постройте, испытайте, ответить на сообщение, отредактировать ответ .. и выиграть баунти? :)
21
ответ дан 25 May 2018 в 10:43
  • 1
    Отлично! Еще не пробовал, но звучит законно ;-) Не могли бы вы рассказать мне, как вы это узнали, или вы просто разработчик для этого? – Psirus 4 June 2012 в 21:03
  • 2
    Смотрите обширные изменения :) – ish 5 June 2012 в 07:54
  • 3
    Ничего себе, потрясающая работа! Это намного более обширно, чем я даже надеялся. Спасибо. И да, этот ответ заслуживает того, что ты получил его. – Psirus 5 June 2012 в 10:31

Для Unity / Gnome позиция жестко закодирована и требует исправления источника gnome-screensaver и восстановления его

Я не ожидаю, что это будет очень сложно

Извините, но - , потому что он жестко закодирован, по крайней мере для Unity и Gnome:

  • Диалог блокировки и блокировка являются частью gnome-screensaver.
  • Положение диалога контролируется с помощью этого бита кода в строке 1212 в строке gnome-screensaver/src/gs-window-x11.c:
        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 дает желаемое выравнивание по левому краю. Конечно, это требует перекомпиляции из источника: (
  • Результат: enter image description here [/g7] более старый широкоэкранный скриншот

Патч

--- 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);

или см. сырой пастебин

  • Настройте 0.1, 0.9 на вкус.
< hr>

Чтобы установить и установить

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. Вам нужно будет повторить весь процесс установки патчей-build-install gnome-screensaver обновляется, поэтому держите его, чтобы сделать жизнь проще и обновить, когда вы будете готовы.


Как вы это поняли? (по запросу)

Нет , Я не один из разработчиков, но у меня есть приличное знание C / C ++. В противном случае это все Google и эвристика.:)

  1. Google говорит вам, что нет очевидного способа ответьте на этот вопрос.
  2. Он также сообщает вам, что диалог блокировки предоставляется gnome-screensaver
  3. . Загрузите источник и проверьте. Хм, gs-lock-plug.c звучит интересно:
    create_page_one (GSLockPlug *plug)
    {
    GtkWidget            *align;
    ...
    align = gtk_alignment_new (0.5, 0.5, 1, 1);
    
  4. Это может быть так! Найдите синтаксис gtk_alignment_new, перейдите в 0.1, 0.9 и перестройте. Не работает :(
  5. Обратите внимание на debug-screensaver.sh в исходной папке, запустите его, а затем заблокируйте и войдите в систему. Выход содержит:
    [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
    
  6. Посмотрите на gs-manager.h, который включает в себя: gboolean gs_manager_request_unlock (GSManager *manager);
  7. Изучить 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);
    }
    
  8. 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)
    
  9. Эвристически перейти к строке 1518 в gs-window-x11.c, gs_window_request_unlock не помогает напрямую, но содержит ряд упоминаний window->priv.
  10. Посмотрите на struct GSWindowPrivate в начале gs-window-x11.c Он содержит GtkWidget *lock_box и GtkWidget *lock_socket
  11. Поиск вхождения файла lock_box в файл, третий результат: window->priv->lock_box = gtk_alignment_new (0.5, 0.5, 0, 0);
  12. Сделайте немного умственной победы, строить, тестировать, преуспеть, публиковать ответ, редактировать ответ .. и выиграть награду?:)
21
ответ дан 25 July 2018 в 18:41

Для Unity / Gnome позиция жестко закодирована и требует исправления источника gnome-screensaver и восстановления его

Я не ожидаю, что это будет очень сложно

Извините, но - , потому что он жестко закодирован, по крайней мере для Unity и Gnome:

  • Диалог блокировки и блокировка являются частью gnome-screensaver.
  • Положение диалога контролируется с помощью этого бита кода в строке 1212 в строке gnome-screensaver/src/gs-window-x11.c:
        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 дает желаемое выравнивание по левому краю. Конечно, это требует перекомпиляции из источника: (
  • Результат: enter image description here [/g7] более старый широкоэкранный скриншот

Патч

--- 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);

или см. сырой пастебин

  • Настройте 0.1, 0.9 на вкус.
< hr>

Чтобы установить и установить

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. Вам нужно будет повторить весь процесс установки патчей-build-install gnome-screensaver обновляется, поэтому держите его, чтобы сделать жизнь проще и обновить, когда вы будете готовы.


Как вы это поняли? (по запросу)

Нет , Я не один из разработчиков, но у меня есть приличное знание C / C ++. В противном случае это все Google и эвристика.:)

  1. Google говорит вам, что нет очевидного способа ответьте на этот вопрос.
  2. Он также сообщает вам, что диалог блокировки предоставляется gnome-screensaver
  3. . Загрузите источник и проверьте. Хм, gs-lock-plug.c звучит интересно:
    create_page_one (GSLockPlug *plug)
    {
    GtkWidget            *align;
    ...
    align = gtk_alignment_new (0.5, 0.5, 1, 1);
    
  4. Это может быть так! Найдите синтаксис gtk_alignment_new, перейдите в 0.1, 0.9 и перестройте. Не работает :(
  5. Обратите внимание на debug-screensaver.sh в исходной папке, запустите его, а затем заблокируйте и войдите в систему. Выход содержит:
    [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
    
  6. Посмотрите на gs-manager.h, который включает в себя: gboolean gs_manager_request_unlock (GSManager *manager);
  7. Изучить 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);
    }
    
  8. 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)
    
  9. Эвристически перейти к строке 1518 в gs-window-x11.c, gs_window_request_unlock не помогает напрямую, но содержит ряд упоминаний window->priv.
  10. Посмотрите на struct GSWindowPrivate в начале gs-window-x11.c Он содержит GtkWidget *lock_box и GtkWidget *lock_socket
  11. Поиск вхождения файла lock_box в файл, третий результат: window->priv->lock_box = gtk_alignment_new (0.5, 0.5, 0, 0);
  12. Сделайте немного умственной победы, строить, тестировать, преуспеть, публиковать ответ, редактировать ответ .. и выиграть награду?:)
21
ответ дан 2 August 2018 в 00:50

Для Unity / Gnome позиция жестко закодирована и требует исправления источника gnome-screensaver и восстановления его

Я не ожидаю, что это будет очень сложно

Извините, но - , потому что он жестко закодирован, по крайней мере для Unity и Gnome:

  • Диалог блокировки и блокировка являются частью gnome-screensaver.
  • Положение диалога контролируется с помощью этого бита кода в строке 1212 в строке gnome-screensaver/src/gs-window-x11.c:
        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 дает желаемое выравнивание по левому краю. Конечно, это требует перекомпиляции из источника: (
  • Результат: enter image description here [/g7] более старый широкоэкранный скриншот

Патч

--- 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);

или см. сырой пастебин

  • Настройте 0.1, 0.9 на вкус.
< hr>

Чтобы установить и установить

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. Вам нужно будет повторить весь процесс установки патчей-build-install gnome-screensaver обновляется, поэтому держите его, чтобы сделать жизнь проще и обновить, когда вы будете готовы.


Как вы это поняли? (по запросу)

Нет , Я не один из разработчиков, но у меня есть приличное знание C / C ++. В противном случае это все Google и эвристика.:)

  1. Google говорит вам, что нет очевидного способа ответьте на этот вопрос.
  2. Он также сообщает вам, что диалог блокировки предоставляется gnome-screensaver
  3. . Загрузите источник и проверьте. Хм, gs-lock-plug.c звучит интересно:
    create_page_one (GSLockPlug *plug)
    {
    GtkWidget            *align;
    ...
    align = gtk_alignment_new (0.5, 0.5, 1, 1);
    
  4. Это может быть так! Найдите синтаксис gtk_alignment_new, перейдите в 0.1, 0.9 и перестройте. Не работает :(
  5. Обратите внимание на debug-screensaver.sh в исходной папке, запустите его, а затем заблокируйте и войдите в систему. Выход содержит:
    [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
    
  6. Посмотрите на gs-manager.h, который включает в себя: gboolean gs_manager_request_unlock (GSManager *manager);
  7. Изучить 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);
    }
    
  8. 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)
    
  9. Эвристически перейти к строке 1518 в gs-window-x11.c, gs_window_request_unlock не помогает напрямую, но содержит ряд упоминаний window->priv.
  10. Посмотрите на struct GSWindowPrivate в начале gs-window-x11.c Он содержит GtkWidget *lock_box и GtkWidget *lock_socket
  11. Поиск вхождения файла lock_box в файл, третий результат: window->priv->lock_box = gtk_alignment_new (0.5, 0.5, 0, 0);
  12. Сделайте немного умственной победы, строить, тестировать, преуспеть, публиковать ответ, редактировать ответ .. и выиграть награду?:)
21
ответ дан 4 August 2018 в 16:21

Для Unity / Gnome позиция жестко закодирована и требует исправления источника gnome-screensaver и восстановления его

Я не ожидаю, что это будет очень сложно

Извините, но - , потому что он жестко закодирован, по крайней мере для Unity и Gnome:

  • Диалог блокировки и блокировка являются частью gnome-screensaver.
  • Положение диалога контролируется с помощью этого бита кода в строке 1212 в строке gnome-screensaver/src/gs-window-x11.c:
        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 дает желаемое выравнивание по левому краю. Конечно, это требует перекомпиляции из источника: (
  • Результат: enter image description here [/g7] более старый широкоэкранный скриншот

Патч

--- 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);

или см. сырой пастебин

  • Настройте 0.1, 0.9 на вкус.
< hr>

Чтобы установить и установить

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. Вам нужно будет повторить весь процесс установки патчей-build-install gnome-screensaver обновляется, поэтому держите его, чтобы сделать жизнь проще и обновить, когда вы будете готовы.


Как вы это поняли? (по запросу)

Нет , Я не один из разработчиков, но у меня есть приличное знание C / C ++. В противном случае это все Google и эвристика.:)

  1. Google говорит вам, что нет очевидного способа ответьте на этот вопрос.
  2. Он также сообщает вам, что диалог блокировки предоставляется gnome-screensaver
  3. . Загрузите источник и проверьте. Хм, gs-lock-plug.c звучит интересно:
    create_page_one (GSLockPlug *plug)
    {
    GtkWidget            *align;
    ...
    align = gtk_alignment_new (0.5, 0.5, 1, 1);
    
  4. Это может быть так! Найдите синтаксис gtk_alignment_new, перейдите в 0.1, 0.9 и перестройте. Не работает :(
  5. Обратите внимание на debug-screensaver.sh в исходной папке, запустите его, а затем заблокируйте и войдите в систему. Выход содержит:
    [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
    
  6. Посмотрите на gs-manager.h, который включает в себя: gboolean gs_manager_request_unlock (GSManager *manager);
  7. Изучить 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);
    }
    
  8. 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)
    
  9. Эвристически перейти к строке 1518 в gs-window-x11.c, gs_window_request_unlock не помогает напрямую, но содержит ряд упоминаний window->priv.
  10. Посмотрите на struct GSWindowPrivate в начале gs-window-x11.c Он содержит GtkWidget *lock_box и GtkWidget *lock_socket
  11. Поиск вхождения файла lock_box в файл, третий результат: window->priv->lock_box = gtk_alignment_new (0.5, 0.5, 0, 0);
  12. Сделайте немного умственной победы, строить, тестировать, преуспеть, публиковать ответ, редактировать ответ .. и выиграть награду?:)
21
ответ дан 7 August 2018 в 18:25

Для Unity / Gnome позиция жестко закодирована и требует исправления источника gnome-screensaver и восстановления его

Я не ожидаю, что это будет очень сложно

Извините, но - , потому что он жестко закодирован, по крайней мере для Unity и Gnome:

  • Диалог блокировки и блокировка являются частью gnome-screensaver.
  • Положение диалога контролируется с помощью этого бита кода в строке 1212 в строке gnome-screensaver/src/gs-window-x11.c:
        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 дает желаемое выравнивание по левому краю. Конечно, это требует перекомпиляции из источника: (
  • Результат: enter image description here [/g7] более старый широкоэкранный скриншот

Патч

--- 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);

или см. сырой пастебин

  • Настройте 0.1, 0.9 на вкус.
< hr>

Чтобы установить и установить

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. Вам нужно будет повторить весь процесс установки патчей-build-install gnome-screensaver обновляется, поэтому держите его, чтобы сделать жизнь проще и обновить, когда вы будете готовы.


Как вы это поняли? (по запросу)

Нет , Я не один из разработчиков, но у меня есть приличное знание C / C ++. В противном случае это все Google и эвристика.:)

  1. Google говорит вам, что нет очевидного способа ответьте на этот вопрос.
  2. Он также сообщает вам, что диалог блокировки предоставляется gnome-screensaver
  3. . Загрузите источник и проверьте. Хм, gs-lock-plug.c звучит интересно:
    create_page_one (GSLockPlug *plug)
    {
    GtkWidget            *align;
    ...
    align = gtk_alignment_new (0.5, 0.5, 1, 1);
    
  4. Это может быть так! Найдите синтаксис gtk_alignment_new, перейдите в 0.1, 0.9 и перестройте. Не работает :(
  5. Обратите внимание на debug-screensaver.sh в исходной папке, запустите его, а затем заблокируйте и войдите в систему. Выход содержит:
    [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
    
  6. Посмотрите на gs-manager.h, который включает в себя: gboolean gs_manager_request_unlock (GSManager *manager);
  7. Изучить 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);
    }
    
  8. 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)
    
  9. Эвристически перейти к строке 1518 в gs-window-x11.c, gs_window_request_unlock не помогает напрямую, но содержит ряд упоминаний window->priv.
  10. Посмотрите на struct GSWindowPrivate в начале gs-window-x11.c Он содержит GtkWidget *lock_box и GtkWidget *lock_socket
  11. Поиск вхождения файла lock_box в файл, третий результат: window->priv->lock_box = gtk_alignment_new (0.5, 0.5, 0, 0);
  12. Сделайте немного умственной победы, строить, тестировать, преуспеть, публиковать ответ, редактировать ответ .. и выиграть награду?:)
21
ответ дан 10 August 2018 в 07:08

Для Unity / Gnome позиция жестко закодирована и требует исправления источника gnome-screensaver и восстановления его

Я не ожидаю, что это будет очень сложно

Извините, но - , потому что он жестко закодирован, по крайней мере для Unity и Gnome:

  • Диалог блокировки и блокировка являются частью gnome-screensaver.
  • Положение диалога контролируется с помощью этого бита кода в строке 1212 в строке gnome-screensaver/src/gs-window-x11.c:
        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 дает желаемое выравнивание по левому краю. Конечно, это требует перекомпиляции из источника: (
  • Результат: enter image description here [/g7] более старый широкоэкранный скриншот

Патч

--- 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);

или см. сырой пастебин

  • Настройте 0.1, 0.9 на вкус.
< hr>

Чтобы установить и установить

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. Вам нужно будет повторить весь процесс установки патчей-build-install gnome-screensaver обновляется, поэтому держите его, чтобы сделать жизнь проще и обновить, когда вы будете готовы.


Как вы это поняли? (по запросу)

Нет , Я не один из разработчиков, но у меня есть приличное знание C / C ++. В противном случае это все Google и эвристика.:)

  1. Google говорит вам, что нет очевидного способа ответьте на этот вопрос.
  2. Он также сообщает вам, что диалог блокировки предоставляется gnome-screensaver
  3. . Загрузите источник и проверьте. Хм, gs-lock-plug.c звучит интересно:
    create_page_one (GSLockPlug *plug)
    {
    GtkWidget            *align;
    ...
    align = gtk_alignment_new (0.5, 0.5, 1, 1);
    
  4. Это может быть так! Найдите синтаксис gtk_alignment_new, перейдите в 0.1, 0.9 и перестройте. Не работает :(
  5. Обратите внимание на debug-screensaver.sh в исходной папке, запустите его, а затем заблокируйте и войдите в систему. Выход содержит:
    [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
    
  6. Посмотрите на gs-manager.h, который включает в себя: gboolean gs_manager_request_unlock (GSManager *manager);
  7. Изучить 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);
    }
    
  8. 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)
    
  9. Эвристически перейти к строке 1518 в gs-window-x11.c, gs_window_request_unlock не помогает напрямую, но содержит ряд упоминаний window->priv.
  10. Посмотрите на struct GSWindowPrivate в начале gs-window-x11.c Он содержит GtkWidget *lock_box и GtkWidget *lock_socket
  11. Поиск вхождения файла lock_box в файл, третий результат: window->priv->lock_box = gtk_alignment_new (0.5, 0.5, 0, 0);
  12. Сделайте немного умственной победы, строить, тестировать, преуспеть, публиковать ответ, редактировать ответ .. и выиграть награду?:)
21
ответ дан 15 August 2018 в 19:07
  • 1
    Отлично! Еще не пробовал, но звучит законно ;-) Не могли бы вы рассказать мне, как вы это узнали, или вы просто разработчик для этого? – Psirus 4 June 2012 в 21:03
  • 2
    Смотрите обширные изменения :) – ish 5 June 2012 в 07:54
  • 3
    Ничего себе, потрясающая работа! Это намного более обширно, чем я даже надеялся. Спасибо. И да, этот ответ заслуживает того, что ты получил его. – Psirus 5 June 2012 в 10:31

Другие вопросы по тегам:

Похожие вопросы: