Разрешение экрана 12.10 на Acer Aspire S3

Для 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); Сделайте немного умственного танца победы, измените, постройте, испытайте, ответить на сообщение, отредактировать ответ .. и выиграть баунти? :)
1
задан 9 November 2012 в 17:31

0 ответов

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

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