Окно Xlib не отображается на экране входа в GDM
Я создал общую библиотеку (*.so), которая будет вызывать окно Xlib, которое будет отображаться "во время" экрана входа в систему GDM после того, как пользователь предоставит свой пароль.
Мое окно Xlib вызывается и создается в модуле PAM (*.so). Ожидается, что когда появится мое окно Xlib (другое окно входа в систему), пользователь должен будет предоставить правильные учетные данные (еще одно учетное данные), и только после того, как будет показана эта среда рабочего стола.
Но проблема в том, что после того, как пользователь предоставил правильный пароль для экрана входа в систему GDM, застрянет на значке ожидания вращения, и мое окно Xlib не отображается. Он будет оставаться там до истечения времени ожидания, и среда рабочего стола также не будет отображаться.
Вот некоторые из вещей, которые я сделал.
Я удалил код, в котором пользователь должен предоставить учетные данные для моего окна Xlib, поэтому окно Xlib будет просто отображено, а не уничтожено. После того, как вход в GDM продолжился, экран входа в GDM исчез, окружение рабочего стола показывается с моим окном Xlib (ожидается). Это означает, что мое окно Xlib могло быть нарисовано в задней части экрана входа в систему GDM.
Я попытался взглянуть на свойства окна Xlib, которое я создал во время зависшего входа в систему GDM. Хотя я создал окно Xlib как root как его родительское окно, оно перерисовывалось другим окном. Таким образом, это было root, новое родительское окно, а затем мое окно Xlib, поскольку оно дочернее.
На застрявшем экране входа в GDM я сравнил свое окно Xlib с другим окном, у моего окна Xlib нет свойств и атрибутов, которые есть у других окон (я обнаружил, используя
xwininfo -root -tree
), поэтому я добавил это. Прямо сейчас это то, что мойxprop -id 0x0111110
выглядит такWM_STATE(WM_STATE): window state: Normal icon window: 0x0 _NET_WM_DESKTOP(CARDINAL) = 4294967295 _NET_WM_STATE(ATOM) = _NET_WM_STATE_SKIP_PAGER, _NET_WM_STATE_SKIP_TASKBAR, _NET_WM_STATE_ABOVE, _NET_WM_STATE_STICKY _NET_WM_ALLOWED_ACTIONS(ATOM) = _NET_WM_ACTION_CHANGE_DESKTOP, _NET_WM_ACTION_ABOVE, _NET_WM_ACTION_BELOW WM_PROTOCOLS(ATOM): protocols WM_DELETE_WINDOW, WM_TAKE_FOCUS, _NET_WM_PING, _NET_WM_SYNC_REQUEST _NET_WM_WINDOW_TYPE(ATOM) = _NET_WM_WINDOW_TYPE_DOCK WM_LOCALE_NAME(STRING) = "en_US.UTF-8" WM_CLASS(STRING) = "gnome-shell", "Gnome-shell" WM_HINTS(WM_HINTS): Client accepts input or input focus: True Initial state is Normal State. bitmap id # to use for icon: 0xa654fb3c WM_NORMAL_HINTS(WM_SIZE_HINTS): program specified location: 0, 0 program specified size: 0 by 0 program specified minimum size: 300 by 200 WM_COMMAND(STRING) = { "gnome-shell" } WM_ICON_NAME(STRING) = "gnome-shell" WM_NAME(STRING) = "Another Login Window (My Xlib window)" WM_CLIENT_MACHINE(STRING) = "localhost.localdomain"
Я установил атрибут окна Xlib
override_redirect
в True, но, похоже, диспетчер окон GDM продолжает устанавливать значение false. Когда я проверил события, он установлен в False.Я попытался проверить в корневом окне, используя
xprop -id 0x15a
(win id корневого окна), и я вижу, что мое окно Xlib является единственным окном, перечисленным в _NET_CLIENT_LIST и NET_CLIENT_LIST_STACKING.Я назвал функцию
XReparentWindow(disp, win, root, 20, 20)
поэтому мое окно будет прямым потомком корня, оно работало, но мое окно Xlib все еще не отображается.
Кстати, я сделал это в Ubuntu 14.04 LTS, и он работал безупречно. Первоначально я использовал GTK+ 3 для окна, но я экспериментировал с Xlib, думая, что у меня будет больше свободы (низкий уровень) в том, что я хочу делать.
Пожалуйста, дайте мне знать, каковы мои варианты продвижения вперед или если есть набор инструментов с графическим интерфейсом, который не уважает или не соответствует оконному менеджеру, так что я могу просто показать свое окно Xlib в этот короткий промежуток времени.