ทำไมตู้ล็อคเกอร์ทำให้หน้าจอเป็นสีดำหลังจากปลดล็อค


11

เครื่อง Xubuntu 16.04 ที่มีการติดตั้งอย่างสมบูรณ์พร้อมกับผู้ใช้ที่สร้างขึ้นใหม่จะไม่ให้ฉันปลดล็อคหลังจากใช้ light-locker เพื่อล็อคหน้าจอของฉัน (ไม่ว่าจะเปิดใช้งานการล็อกด้วยตนเองหรือหมดเวลา) หน้าจอยังคงสีดำ ( แต่ขับเคลื่อน) บนรายการรหัสผ่านถูกต้อง

การฆ่าตู้ล็อกเกอร์จาก tty1 จะเปิดเผยเดสก์ท็อปแล้ว (และป้องกันการล็อคเพิ่มเติม)

พยายามทำตามขั้นตอน:

  • เปิดใช้งาน / ปิดใช้งานล็อคในการตั้งค่าตู้เก็บของแสง & ในการตั้งค่าพลังงาน (ไม่มีการเปลี่ยนแปลง)
  • ใช้ xscreensaver แทน light-locker (ทำงาน)
  • ทดสอบว่าปัญหาเกี่ยวข้องกับการระงับหรือปิดฝา (ไม่ใช่)
    • อย่างไรก็ตามหลังจากที่หยุดชั่วคราวหน้าจอสีดำจะแสดงThis session is locked: You will be redirected to the unlock dialog automatically in a few secondsข้อความ - โดยไม่มีการเปลี่ยนเส้นทางใด ๆ
  • ลบ + ติดตั้ง lightdm ใหม่, ตู้ล็อคเกอร์และ xubuntu-default-settings
  • การใช้loginctl unlock-sessionไม่มีผล
  • systemctl status lightdm แสดงเฉพาะข้อความ (ไม่เป็นอันตรายคาดว่า) เกี่ยวกับโมดูล kwallet pam ที่หายไป
  • ตรวจสอบบันทึกการใช้งาน dpkg สำหรับการอัพเกรดระหว่าง "ใช้งานได้" และ "ไม่ทำงานอีกต่อไป" (ไม่มีข้อสงสัย) และบูตเคอร์เนลก่อนหน้า (ยังคงมีอยู่)
  • พฤติกรรมเปรียบเทียบระหว่างตู้ล็อคเกอร์ที่เริ่มต้นเซสชันและเริ่มด้วยตนเองหนึ่งรายการ (ไม่ต่างกัน)
  • เพิ่มผู้ใช้ไปยังกลุ่มnopasswdloginกลุ่ม (หน้าจอสีดำเกิดขึ้นทันทีหลังจากล็อคไม่เพียง แต่หลังจากป้อนรหัสผ่าน)

ขั้นตอนเพิ่มเติมอะไรที่สามารถพิสูจน์ได้ว่ามีประโยชน์ในการหาวิธีแก้ไขปัญหานี้?

บันทึกการแก้ไขข้อบกพร่อง:

$ export LC_ALL=C; light-locker --debug & ( sleep 5; echo "## Locking now"; light-locker-command --lock; sleep 10; echo "### 10 seconds have passed - entering password now"; sleep 10; echo "### 10 more seconds have passwd - Killing"; killall light-locker; sleep 5; echo "### Killed now" )  
[1] 23463
[gs_debug_init] gs-debug.c:106 (00:08:32):   Debugging enabled
[main] light-locker.c:142 (00:08:32):    initializing light-locker 1.7.0
[main] light-locker.c:144 (00:08:32):    lock after screensaver 10
[main] light-locker.c:145 (00:08:32):    late locking 0
[main] light-locker.c:146 (00:08:32):    lock on suspend 1
[main] light-locker.c:147 (00:08:32):    lock on lid 0
[main] light-locker.c:148 (00:08:32):    idle hint 1
[query_session_id] gs-listener-dbus.c:2088 (00:08:32):   org.freedesktop.login1.NoSessionForPID raised:
 PID 23463 does not belong to any known session


[init_session_id] gs-listener-dbus.c:2180 (00:08:32):    Got session-id: (null)
[query_sd_session_id] gs-listener-dbus.c:2164 (00:08:32):    Couldn't determine our own sd session id: No such process
[init_session_id] gs-listener-dbus.c:2185 (00:08:32):    Got sd-session-id: (null)
[init_seat_path] gs-listener-dbus.c:2262 (00:08:32):     Got seat: /org/freedesktop/DisplayManager/Seat0
[gs_listener_delay_suspend] gs-listener-dbus.c:449 (00:08:32):   Delay suspend
[gs_listener_x11_acquire] gs-listener-x11.c:172 (00:08:32):  ScreenSaver Registered
[listener_dbus_handle_system_message] gs-listener-dbus.c:1330 (00:08:32):    obj_path=/org/freedesktop/DBus interface=org.freedesktop.DBus method=NameAcquired destination=:1.316
## Locking now
[gs_grab_grab_root] gs-grab-x11.c:647 (00:08:37):    Grabbing the root window
[gs_grab_get_keyboard] gs-grab-x11.c:153 (00:08:37):     Grabbing keyboard widget=E3
[gs_grab_get_mouse] gs-grab-x11.c:213 (00:08:37):    Grabbing mouse widget=E3
[gs_manager_create_windows_for_screen] gs-manager.c:548 (00:08:37):  Creating 1 windows for screen 0
[gs_manager_create_window_for_monitor] gs-manager.c:324 (00:08:37):  Creating window for monitor 0 [0,0] (1600x900)
[update_geometry] gs-window-x11.c:197 (00:08:37):    got geometry for monitor 0: x=0 y=0 w=1600 h=900
[update_geometry] gs-window-x11.c:210 (00:08:37):    using geometry for monitor 0: x=0 y=0 w=1600 h=900
[update_geometry] gs-window-x11.c:197 (00:08:37):    got geometry for monitor 0: x=0 y=0 w=1600 h=900
[update_geometry] gs-window-x11.c:210 (00:08:37):    using geometry for monitor 0: x=0 y=0 w=1600 h=900
[gs_window_move_resize_window] gs-window-x11.c:243 (00:08:37):   Move and/or resize window on monitor 0: x=0 y=0 w=1600 h=900
[update_geometry] gs-window-x11.c:197 (00:08:37):    got geometry for monitor 0: x=0 y=0 w=1600 h=900
[update_geometry] gs-window-x11.c:210 (00:08:37):    using geometry for monitor 0: x=0 y=0 w=1600 h=900
[gs_window_move_resize_window] gs-window-x11.c:243 (00:08:37):   Move and/or resize window on monitor 0: x=0 y=0 w=1600 h=900
[update_geometry] gs-window-x11.c:197 (00:08:37):    got geometry for monitor 0: x=0 y=0 w=1600 h=900
[update_geometry] gs-window-x11.c:210 (00:08:37):    using geometry for monitor 0: x=0 y=0 w=1600 h=900
[gs_window_move_resize_window] gs-window-x11.c:243 (00:08:37):   Move and/or resize window on monitor 0: x=0 y=0 w=1600 h=900
[gs_manager_timed_switch] gs-manager.c:445 (00:08:37):   Start switch to greeter timer
[gs_window_xevent] gs-window-x11.c:369 (00:08:37):   not raising our windows
[window_map_event_cb] gs-manager.c:233 (00:08:37):   Handling window map_event event
[gs_listener_resume_suspend] gs-listener-dbus.c:513 (00:08:37):  Resume suspend: fd=14
[manager_maybe_grab_window] gs-manager.c:204 (00:08:37):     Moving grab to 0x5595f8d5a290
[gs_grab_move_keyboard] gs-grab-x11.c:450 (00:08:37):    Moving keyboard grab from E3 to 3A0000C
[gs_grab_move_keyboard] gs-grab-x11.c:457 (00:08:37):    *** doing X server grab
[gs_grab_release_keyboard] gs-grab-x11.c:279 (00:08:37):     Ungrabbing keyboard
[gs_grab_get_keyboard] gs-grab-x11.c:153 (00:08:37):     Grabbing keyboard widget=3A0000C
[gs_grab_move_keyboard] gs-grab-x11.c:479 (00:08:37):    *** releasing X server grab
[gs_grab_move_mouse] gs-grab-x11.c:395 (00:08:37):   Moving pointer grab from E3 to 3A0000C
[gs_grab_move_mouse] gs-grab-x11.c:402 (00:08:37):   *** doing X server grab
[gs_grab_release_mouse] gs-grab-x11.c:320 (00:08:37):    Ungrabbing pointer
[gs_grab_get_mouse] gs-grab-x11.c:213 (00:08:37):    Grabbing mouse widget=3A0000C
[gs_grab_move_mouse] gs-grab-x11.c:425 (00:08:37):   *** releasing X server grab
[listener_dbus_handle_system_message] gs-listener-dbus.c:1330 (00:08:37):    obj_path=/org/freedesktop/login1 interface=org.freedesktop.DBus.Properties method=PropertiesChanged destination=(null)
[update_geometry] gs-window-x11.c:197 (00:08:37):    got geometry for monitor 0: x=0 y=0 w=1600 h=900
[update_geometry] gs-window-x11.c:210 (00:08:37):    using geometry for monitor 0: x=0 y=0 w=1600 h=900
[gs_window_move_resize_window] gs-window-x11.c:243 (00:08:37):   Move and/or resize window on monitor 0: x=0 y=0 w=1600 h=900
[update_geometry] gs-window-x11.c:197 (00:08:37):    got geometry for monitor 0: x=0 y=0 w=1600 h=900
[update_geometry] gs-window-x11.c:210 (00:08:37):    using geometry for monitor 0: x=0 y=0 w=1600 h=900
[gs_window_move_resize_window] gs-window-x11.c:243 (00:08:37):   Move and/or resize window on monitor 0: x=0 y=0 w=1600 h=900
[gs_listener_send_lock_session] gs-listener-dbus.c:180 (00:08:38):   Send lock session
[listener_dbus_handle_system_message] gs-listener-dbus.c:1330 (00:08:38):    obj_path=(null) interface=(null) method=(null) destination=:1.316
[listener_dbus_handle_system_message] gs-listener-dbus.c:1330 (00:08:39):    obj_path=/org/freedesktop/login1/session/c5 interface=org.freedesktop.DBus.Properties method=PropertiesChanged destination=(null)
[listener_dbus_handle_system_message] gs-listener-dbus.c:1330 (00:08:39):    obj_path=/org/freedesktop/login1/session/c12 interface=org.freedesktop.DBus.Properties method=PropertiesChanged destination=(null)
[listener_dbus_handle_system_message] gs-listener-dbus.c:1330 (00:08:39):    obj_path=/org/freedesktop/login1/seat/seat0 interface=org.freedesktop.DBus.Properties method=PropertiesChanged destination=(null)
process 23463: arguments to dbus_message_new_method_call() were incorrect, assertion "path != NULL" failed in file ../../dbus/dbus-message.c line 1340.
This is normally a bug in some application using the D-Bus library.
[query_session_active] gs-listener-dbus.c:1124 (00:08:39):   Couldn't allocate the dbus message
[listener_dbus_handle_system_message] gs-listener-dbus.c:1361 (00:08:39):    systemd notified ActiveSession 0
[listener_session_switched_cb] gs-monitor.c:298 (00:08:39):  Session switched: 0
[gs_manager_stop_switch] gs-manager.c:456 (00:08:39):    Stop switch to greeter timer
[listener_dbus_handle_system_message] gs-listener-dbus.c:1330 (00:08:39):    obj_path=/org/freedesktop/login1/seat/seat0 interface=org.freedesktop.DBus.Properties method=PropertiesChanged destination=(null)
[listener_dbus_handle_system_message] gs-listener-dbus.c:1330 (00:08:39):    obj_path=/org/freedesktop/login1/session/c12 interface=org.freedesktop.DBus.Properties method=PropertiesChanged destination=(null)
[listener_dbus_handle_system_message] gs-listener-dbus.c:1330 (00:08:39):    obj_path=/org/freedesktop/login1/user/_108 interface=org.freedesktop.DBus.Properties method=PropertiesChanged destination=(null)
[listener_dbus_handle_system_message] gs-listener-dbus.c:1330 (00:08:39):    obj_path=/org/freedesktop/login1/seat/seat0 interface=org.freedesktop.DBus.Properties method=PropertiesChanged destination=(null)
process 23463: arguments to dbus_message_new_method_call() were incorrect, assertion "path != NULL" failed in file ../../dbus/dbus-message.c line 1340.
This is normally a bug in some application using the D-Bus library.
[query_session_active] gs-listener-dbus.c:1124 (00:08:39):   Couldn't allocate the dbus message
[listener_dbus_handle_system_message] gs-listener-dbus.c:1361 (00:08:39):    systemd notified ActiveSession 0
[listener_session_switched_cb] gs-monitor.c:298 (00:08:39):  Session switched: 0
[listener_dbus_handle_system_message] gs-listener-dbus.c:1330 (00:08:39):    obj_path=/org/freedesktop/login1/session/c5 interface=org.freedesktop.login1.Session method=Lock destination=(null)
### 10 seconds have passed - entering password now
[listener_dbus_handle_system_message] gs-listener-dbus.c:1330 (00:08:51):    obj_path=/org/freedesktop/login1/session/c5 interface=org.freedesktop.login1.Session method=Unlock destination=(null)
[listener_dbus_handle_system_message] gs-listener-dbus.c:1330 (00:08:51):    obj_path=/org/freedesktop/login1/session/c13 interface=org.freedesktop.DBus.Properties method=PropertiesChanged destination=(null)
[listener_dbus_handle_system_message] gs-listener-dbus.c:1330 (00:08:51):    obj_path=/org/freedesktop/login1/session/c5 interface=org.freedesktop.DBus.Properties method=PropertiesChanged destination=(null)
[listener_dbus_handle_system_message] gs-listener-dbus.c:1330 (00:08:51):    obj_path=/org/freedesktop/login1/seat/seat0 interface=org.freedesktop.DBus.Properties method=PropertiesChanged destination=(null)
process 23463: arguments to dbus_message_new_method_call() were incorrect, assertion "path != NULL" failed in file ../../dbus/dbus-message.c line 1340.
This is normally a bug in some application using the D-Bus library.
[query_session_active] gs-listener-dbus.c:1124 (00:08:51):   Couldn't allocate the dbus message
[listener_dbus_handle_system_message] gs-listener-dbus.c:1361 (00:08:51):    systemd notified ActiveSession 0
[listener_session_switched_cb] gs-monitor.c:298 (00:08:51):  Session switched: 0
[xroot_filter] gs-listener-x11.c:124 (00:08:52):     ScreenSaver stopped
### 10 more seconds have passwd - Killing
### Killed now

การทำเช่นนี้กับระบบที่รู้จักกันดีจะทำให้:

$ comm -3 <(grep -iv grab good | sed 's/[0-9:]\+/[NN]/g;s/[ \t]\+/ /g' | sort) <(grep -iv grab bad | sed 's/[0-9:]\+/[NN]/g;s/[ \t]\+/ /g' | sort) | head -n2
[init_session_id] gs-listener-dbus.c[NN] ([NN])[NN] Got session-id[NN] (null)
[init_session_id] gs-listener-dbus.c[NN] ([NN])[NN] Got session-id[NN] /org/freedesktop/login[NN]/session/c[NN]

และจริงๆแล้วมีบางสิ่งที่ดูเหมือนว่าจะน่าอึดอัดใจมากเกี่ยวกับการตั้งค่าเซสชัน:

$ loginctl session-status
Could not get properties: No such process

1
ฮะ! คุณจะพบว่าทางออกเดียวคือของฉันและที่จะใช้ xscreensaver และลบตู้เก็บของแสง
Fabby

2
คุณเคยลองlight-lockerใช้ตัวเลือกดีบั๊กที่กล่าวถึงในหน้าคนหรือไม่? manpages.ubuntu.com/manpages/xenial/man1/light-locker.1.html
Elder Geek

1
@ anx ความโปรดปรานของคุณจะหายไปภายใน 5 ชั่วโมง ... ต้องการให้ฉันเขียนคำตอบเดิมซ้ำอีกครั้งหรือไม่ ไม่ใช่สิ่งที่คุณต้องการ แต่ฉันมีปัญหาเดียวกันในเวลาที่สูญเสียเวลาหลายชั่วโมงและเพิ่งไป xscreensaver (และสนุกกับมัน)
Fabby

คุณได้รับ 15 จากเงินรางวัลของคุณกลับมาแล้ว! คำตอบของคุณดีกว่าของฉันดังนั้นเป็นคำถามของคุณจึง upvoted ทั้งสอง!
Fabby

คำตอบ:


6

TL; DR: light-locker ทำให้หน้าจอเป็นสีดำหาก systemd ไม่สามารถอ่าน / proc

  • light-lockerขึ้นอยู่กับการให้บริการdbusIPC
  • dbusขึ้นอยู่กับsystemd-logindการให้sessionข้อมูล
  • systemd-logindขึ้นอยู่กับ/procการให้processข้อมูล

ความหมายนี้จะไม่ทำงานร่วมกันเป็นอย่างดี:

$ file /sbin/init
/sbin/init: symbolic link to /lib/systemd/systemd
$ mount | grep proc
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime,hidepid=2,gid=1337)

และไม่สามารถคาดหวังได้ว่า:

hidepid เข้ากันไม่ได้กับ systemd ขอโทษ [.. ] อย่างไรก็ตามการปิดเช่นนี้ไม่ได้เกิดจาก systemd - Lennart Poettering

โซลูชันบางส่วน 1

โซลูชันบางส่วนเพราะมันมาพร้อมกับการเปิดเผยข้อมูล

อนุญาตให้โปรแกรมด้อยโอกาส (เช่น systemd หลังจากวางสิทธิพิเศษ) /procเพื่อเข้าถึงผู้ใช้งานอื่นดำเนินการข้อมูลใน

$ sudo mount -o remount,hidepid=0 /proc
 # and fix /etc/fstab accordingly

โซลูชันบางส่วน 2

โซลูชันบางส่วนเนื่องจาก systemd อาจแตกในที่อื่นไม่ใช่เพียงเข้าสู่ระบบ

เพิ่ม systemd-logind ให้กับกลุ่มที่เหมาะสมซึ่งทำได้อย่างสะดวกที่สุดโดยการเพิ่มบริการดรอปอิน

$ addgroup showpid
$ adduser myuser showpid
$ sudo mount -o remount,hidepid=2,gid=showpid /proc
 # and fix /etc/fstab accordingly
$ echo -e '[Service]\nSupplementaryGroups=showpid' | sudo tee /etc/systemd/system/systemd-logind.service.d/10-showpid.conf
$ sudo systemctl daemon-reload
$ sudo systemctl restart systemd-logind

หลังจากที่ทั้งวิธีการแก้ปัญหาที่Got session-id: (null)ข้อความควรจะมีลักษณะเหมือนและแสงล็อกเกอร์จะสามารถสื่อสารได้อย่างถูกต้องผ่านGot session-id: /org/freedesktop/login1/c7dbus


ฉันควรทำอะไรให้คิดวิธีนี้ให้เร็วขึ้น?

  • หากมีสิ่งใดเปลี่ยนแปลงไปและคุณไม่สามารถทราบได้อย่างรวดเร็วว่ามีอะไรเปลี่ยนแปลงไปเพียงแค่สำรองข้อมูลไว้แล้วและdiff -ruiNทั้งระบบ
  • จัดทำเป็นเอกสารในครั้งแรกที่ปัญหาเกิดขึ้นอย่างแม่นยำมากขึ้นดังนั้นการเรียงลำดับรายงาน logfiles / IDS ตามเวลาจะเปิดเผยสาเหตุที่เกี่ยวข้องอย่างรวดเร็ว
  • ยื่นรายงานข้อผิดพลาดเพิ่มเติม แอปพลิเคชันล้มเหลวอย่างเงียบ ๆ ภายใต้เงื่อนไขที่จะทำให้เกิดอาการปวดหัวในภายหลังและ / หรือการล็อคระบบไม่เป็นที่ยอมรับ

ดังนั้นคุณยื่นรายงานข้อผิดพลาดบางอย่างเกี่ยวกับเรื่องนี้
jarno
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.