Câu hỏi Làm thế nào tôi có thể gỡ lỗi tại sao gnome-settings-daemon-localeexec không được bắt đầu khi đăng nhập?


Tôi đang sử dụng Ubuntu Gnome 14.04 và gnome-settings-daemon-localeexec không được bắt đầu khi đăng nhập. Làm thế nào tôi có thể gỡ lỗi tại sao điều này xảy ra?

Tôi đã tìm thấy câu hỏi này: gnome-settings-daemon không bắt đầu khi tôi đăng nhập, nhưng nó không thực sự là một giải pháp cho tôi, vì vậy tôi muốn gỡ lỗi nó và tìm ra vấn đề thực sự và có thể là một lỗi nếu cần thiết.

Tôi là một người sử dụng Linux có kinh nghiệm nhưng tôi không biết làm thế nào các trình khởi động vỏ gnome hoạt động và bắt đầu từ đâu.

CHỈNH SỬA:

Đây có thể là các câu hỏi liên quan:

CHỈNH SỬA 2:

Tôi đã mở một báo cáo lỗi trên bảng khởi chạy, cho phép xem liệu điều đó có giúp ích hay không: gnome-settings-daemon-localeexec không được bắt đầu khi đăng nhập

CHỈNH SỬA 3:

Tìm thấy các chủ đề khác có thể trợ giúp:


4
2018-05-13 18:05


gốc


1 cho một nỗ lực nghiên cứu tốt + câu hỏi được định dạng tốt! :) - jobin


Các câu trả lời:


Gỡ lỗi là một quá trình, vì vậy tôi sẽ mô tả quá trình mà tôi sẽ sử dụng để tấn công một vấn đề như vậy. Các câu hỏi là:

  • nó có hoạt động với tài khoản người dùng mới không? (nghĩa là nó là một vấn đề chung với hệ thống, hoặc với một tài khoản?)
  • nó phải được bắt đầu như thế nào?
  • là nó thực sự đang được bắt đầu?
  • nếu có, nó có bị lỗi hay không? (Điều này có lẽ nhiều khả năng là nó không được chạy ở nơi đầu tiên, và kết quả là tương tự)

Nếu nó là vấn đề với tài khoản (user config), và nó hoạt động với tài khoản mới tạo, bạn có thể theo dõi vấn đề bằng cách sao chép các tập tin cấu hình từ tài khoản bị hỏng sang tài khoản đang hoạt động và kiểm tra đăng nhập cho đến khi nó bị hỏng. (Hoặc, cách khác, bắt đầu với tài khoản bị hỏng, và loại bỏ các tập tin và thư mục cho đến khi nó hoạt động.) Tiếp cận này như là một quá trình lặp đi lặp lại - bắt đầu, sao chép một thư mục / tập tin tập, đã phá vỡ tài khoản có / không, loại bỏ một nửa bộ , goto bắt đầu. Nó có thể tốn thời gian, vì vậy thường mọi người sẽ chỉ cần thiết lập lại tài khoản và không bận tâm để theo dõi những gì đã phá vỡ.

Nếu bạn muốn theo dõi nguồn phần mềm của vấn đề, trước hết hãy xem ~ / .cache / gdm / session.log và / var / log / syslog để xem có bất kỳ lỗi rõ ràng nào liên quan đến vấn đề của bạn hay không. Sau đó, sử dụng nguồn:

$ apt-file search gnome-settings-daemon-localeexec
gnome-settings-daemon: /usr/lib/gnome-settings-daemon/gnome-settings-daemon-localeexec
$ apt-get source gnome-settings-daemon
$ cd gnome-settings-daemon-*
$ grep -r gnome-settings-daemon-localeexec
...
data/gnome-settings-daemon.desktop.in.in:Exec=@libexecdir@/gnome-settings-daemon-localeexec
$ cat data/gnome-settings-daemon.desktop.in.in
[Desktop Entry]
Type=Application
_Name=GNOME Settings Daemon
Exec=@libexecdir@/gnome-settings-daemon-localeexec
OnlyShowIn=GNOME;
NoDisplay=true
X-GNOME-Autostart-Phase=Initialization
X-GNOME-Autostart-Notify=true
X-GNOME-AutoRestart=true

Vì vậy, bây giờ chúng ta biết gnome-settings-daemon-localeexec được chạy từ một tệp .desktop được gọi là gnome-settings-daemon.desktop. Nó được cài đặt ở đâu?

$ locate gnome-settings-daemon.desktop
/usr/share/gnome/autostart/gnome-settings-daemon.desktop
$ file /usr/lib/gnome-settings-daemon/gnome-settings-daemon-localeexec
/usr/lib/gnome-settings-daemon/gnome-settings-daemon-localeexec: POSIX shell script, ASCII text executable
$ vi /usr/lib/gnome-settings-daemon/gnome-settings-daemon-localeexec
# it is just a wrapper around /usr/lib/gnome-settings-daemon/gnome-settings-daemon

Hãy thử chạy nó để xem có vấn đề nào đang chạy daemon thực sự (crashing, v.v.) không:

$ /usr/lib/gnome-settings-daemon/gnome-settings-daemon-localeexec

Bạn cũng có thể thử:

$ gnome-settings-daemon --debug

Tự khởi động có đang chạy không? Tìm kiếm kết quả "debug gnome autostart" trong trang này, gợi ý:

Bật = false

Để bật gỡ lỗi, hãy đặt khóa gỡ lỗi / Bật thành "true" trong   /gdm/custom.conf và khởi động lại GDM.

Vì vậy, hãy thử điều đó, và sau đó kiểm tra / var / log / syslog. Một lựa chọn khác ở đây là sửa đổi / usr / lib / gnome-settings-daemon / gnome-settings-daemon-localeexec và thêm các câu lệnh debug. Nó chỉ là một kịch bản shell, vì vậy thêm một cái gì đó như echo "localeexec date $(date) env $(env)" > /tmp/log. Sau đó đăng nhập và kiểm tra / tmp / log.

(Khi gỡ lỗi bất kỳ chương trình cụ thể nào thường có cách để thêm các câu lệnh in vào tệp nhật ký "thích hợp", nhưng việc mở tệp nhật ký của riêng bạn thường dễ dàng và nhanh hơn, vì nó giữ gỡ lỗi riêng của bạn và không đòi hỏi phải hiểu nhiều các lớp ngôn ngữ / hệ thống / loglevel / lọc được áp dụng cho bất kỳ chương trình cụ thể nào.)

Việc đăng nhập và gỡ lỗi cho đến nay có thể sẽ tiếp xúc với vấn đề. Đối với các lỗi khó hơn, nằm trong các tệp nhị phân được biên dịch, bạn sẽ phải tải xuống nguồn với apt-get source, sửa đổi nó để thêm một số mã gỡ lỗi (các câu lệnh in), biên dịch nguồn đã sửa đổi và cài đặt nó, và sau đó kiểm tra nó. Điều tuyệt vời ở đây là toàn bộ apt/dpkg hệ thống được thiết kế để làm cho việc này trở nên dễ dàng, nhanh chóng và dễ truy cập chỉ với một vài lệnh. Trình gỡ lỗi có thể hữu ích để kiểm tra trạng thái chương trình nội bộ phức tạp, nhưng sử dụng lệnh in là một quy trình nhanh hơn hoạt động trên tất cả các ngôn ngữ và hệ thống, vì vậy đó thường là cách tiếp cận ban đầu của tôi.

CHỈNH SỬA:

Như một bản tóm tắt các bình luận, tôi đã thay thế dòng trong / usr / lib / gnome-settings-daemon / gnome-settings-daemon-localeexec:

exec /usr/lib/gnome-settings-daemon/gnome-settings-daemon

với

nohup /usr/lib/gnome-settings-daemon/gnome-settings-daemon --debug >/tmp/gnome-settings-daemon.log 2>&1 &

để nắm bắt đầu ra của quá trình


4
2018-05-20 13:03



Cảm ơn bạn @bain. Chỉ cần cho thông tin của bạn, nó cũng không thành công cho các tài khoản mới được tạo nên tôi sẽ thử với "phương pháp ghi nhật ký". Cảm giác của tôi, như tôi không biết chắc chắn, là kịch bản thậm chí không được tung ra. Tôi sẽ cho bạn biết khi tôi có thể xác nhận nó. - adosaiguas
Những gì tôi đã tìm thấy bằng cách thêm echo vào gnome-settings-daemon-localeexec và bằng cách cho phép đăng nhập vào gnome-shell là gnome-settings-daemon-localeexec được khởi chạy khi gnome-shell được khởi động, nhưng vì một số lý do nó chết / tắt máy khi người dùng đăng nhập và tôi phải bắt đầu bằng tay sau khi đăng nhập (tôi đã làm việc này mọi lúc). Tôi hiểu rằng đây là lỗi và từ bây giờ tôi nên cố gắng tìm sự giúp đỡ từ nhóm gnome. Bất kỳ ý tưởng nào khác mà tôi có thể tiếp tục gỡ lỗi? Có thể gắn vào daemon với gdb trước khi đăng nhập? - adosaiguas
@adosaiguas Capture đầu ra của quá trình tức là. trong g-s-d-localeexec thay vì exec /.../gnome-settings-daemon làm (/.../gnome-settings-daemon --debug)&>/tmp/gsd.log. Điều đó cũng sẽ cho bạn thấy nếu quá trình nhận được tín hiệu và chết. Ngoài ra, bạn có thể bọc toàn bộ tập lệnh - mv g-s-d-localeexec thành g-d-s-localeexec.real sau đó trong g-d-s.localeexec chạy tệp .real thực thi và chuyển hướng đầu ra. - bain
@adosaiguas Một điều bạn có thể thử đang chạy nó dưới strace: chỉ cần đặt strace  trước cuộc gọi tới gnome-settings-daemon và đảm bảo bạn chuyển hướng đầu ra ở đâu đó. Nó đổ khá nhiều đầu ra, nhưng thường nếu quá trình này đột ngột chết, bạn sẽ thấy một số syscall thất bại ngay trước khi nó chết. - bain
Tôi đã thay thế dòng exec bằng cách này: (/ usr / lib / gnome-settings-daemon / gnome-settings-daemon -debug) &> / tmp / gnome-settings-daemon.log 2> & 1 và không có gì là được ghi vào nhật ký. Tôi sẽ thử với strace đó. - adosaiguas