Tài liệu: Kiến trúc của phiên Linux


20

Tôi đang tìm kiếm một tài liệu tổng quan tốt mô tả chồng các trình tiện ích và dịch vụ liên quan đến một phiên Linux hiện đại. Mặc dù đã đọc nhiều tài liệu khác nhau về dbus, và systemd, tôi vẫn không có được bức tranh lớn.

Cụ thể, tôi đang tìm câu trả lời cho những câu hỏi này (không trả lời các câu hỏi, họ chỉ nên làm rõ loại tài liệu nào tôi đang tìm):

  • Sau khi đăng nhập, quá trình nào là gốc của phiên người dùng?

  • Những quá trình nên được bắt đầu, và tại sao? Tôi đang tìm kiếm một câu trả lời không thể tin được trên Desktop, bất kể Gnome, KDE, FVWM hay shell đơn giản được bắt đầu.

  • Tất cả những vai này làm gì? Ai trong số họ sẽ chạy một mình, phụ thuộc vào người khác? Cái nào nên được bắt đầu bởi ai, tại sao, và trong bao lâu? Và ai nên duy trì sở thú đó?

Tôi hỏi, vì tôi thấy rằng tôi có một vườn thú toàn bộ daemon chạy ngay sau khi khởi động: systemd-journald, systemd-udevd, dbus-daemon, systemd-logind. Nhưng không đủ: Ngoài việc này, chạy siêu nhẹ PDF-xem zathura thêm populates phiên của tôi với dbus-launch, dbus-daemon, at-spi2-registryd, và at-spi-bus-launcher, sự ra đời sau nhưng khác dbus-daemon. Không ai trong số họ đã ở đó trước đó, không ai được mời, nhưng họ sẽ ở quanh nhà, mang lại cho tôi cảm giác rùng rợn, cho đến khi tôi đăng xuất. Tôi chắc chắn tôi đang thiếu một cái gì đó ở đây ...

Một ví dụ khác: Sau khi đăng nhập, tôi systemdchạy UID với người dùng của mình, nhưng tôi không biết nên làm gì (kể từ phiên bản 206, tôi nghĩ rằng tôi không nên sử dụng nó làm trình quản lý phiên, phải không?). Nó có một quá trình con (sd-pam), mà tôi không thể tìm thấy tài liệu về.

Họ làm gì? Ý tưởng đằng sau thiết lập này là gì?

Để làm rõ quan điểm của tôi: Trong Tiếng Anh ngày xưa, đủ để biết rằng loginsẽ khởi chạy shell đăng nhập của tôi ( bash, thực thi ~/.profile) và từ đó tôi có thể tiếp tục xây dựng một phiên, tùy theo hoàn cảnh, có thể khởi chạy screenhoặc startx.


4
Câu hỏi này không thể được trả lời bởi vì mỗi bản phân phối đều có nội dung riêng. Thậm chí tệ hơn, môi trường máy tính để bàn KDE và Gnome khác nhau rất nhiều liên quan đến những gì xảy ra sau khi Hệ thống cửa sổ X được khởi động. Tuy nhiên, tệ hơn, các bản phân phối thay đổi cách làm của họ - bạn đề cập đến systemd tương đối mới. Bây giờ nếu bạn muốn có một câu trả lời không biết phân phối thì đó là "nhân Linux bắt đầu init và mọi thứ khác phụ thuộc vào cách init được cấu hình". Câu trả lời này nông cạn vì nó rộng, trong khi với mỗi câu trả lời sâu, bạn sẽ phải thu hẹp câu hỏi của mình ít nhất là các phiên bản phân phối.
Thorsten Staerk

1
xin vui lòng chia ra câu hỏi của bạn. Ví dụ, tôi có thể bảo bạn tìm phiên gnome và startkde là quá trình "phiên gốc" cần được giải thích thêm.
Thorsten Staerk

1
@ thorsten-staerk: Không thể trả lời được vì mỗi distro đều có công cụ riêng của mình. Vì vậy, bạn đang nói rằng tôi không thể đưa ra bất kỳ giả định nào về việc các deamon đang chạy? Tôi thực sự không thể tin điều đó. Xin lỗi, nhưng việc tách câu hỏi sẽ không đưa ra câu trả lời mà tôi đang tìm kiếm. Nhưng tôi sẽ cố gắng viết lại cụm từ trên máy tính để bàn, không rõ ràng: Tôi đang tìm kiếm mẫu số chung thấp nhất hoặc tập hợp các deamon tối thiểu (và biện minh cho mỗi trong số chúng), dự kiến ​​trong một phiên. Cách chúng tương tác và cách tập hợp này thay đổi với các loại phiên khác nhau (có dbusd trong phiên cuối không? Thông qua SSH?)
stefan

1
Linux đang chạy trên các thiết bị không có gì ngoài màn hình LCD. Nó cũng đang chạy trên điện thoại di động không có AppStore và không có camera. Nó cũng đang chạy trên Samsung Galaxy và trên máy tính lớn. Nó có thể - có ý nghĩa - sử dụng một vài Terabyte RAM và nó có thể phù hợp với một số kilobyte. Tôi e rằng mẫu số chung thấp nhất của phiên Linux là Linux và bạn có "quyền tự do lựa chọn" đôi khi xấu xí để chọn thứ khác bạn cần. Đối với máy tính để bàn, tôi sẽ cố gắng liệt kê các mẫu số chung thấp nhất nhưng bạn sẽ tốt hơn khi đặt câu hỏi về dbus thay vì "mọi thứ".
Thorsten Staerk

Câu trả lời:


8

Tôi rất thích thú với câu hỏi của bạn và tôi đã trả lời nó trên linuxintro . Đây là câu trả lời phù hợp cho câu hỏi của bạn:

Khi một PC điển hình có Linux như Fedora, SUSE hoặc Ubuntu khởi động các bước sẽ như sau:

  1. BIOS chạy tự kiểm tra
  2. BIOS tải khu vực khởi động và thực thi nó
  3. Bootloader như grub hoặc lilo được thực thi
  4. Bootmenu được hiển thị (tùy chọn)
  5. Hạt nhân được tải
  6. Đĩa RAM ban đầu được tải
  7. Hạt nhân được thực thi
  8. Kernel thực thi init
  9. init thực thi, tùy thuộc vào bản phân phối, phiên bản và cấu hình của bạn

    • SysV init script hoặc
    • hệ thống hoặc
    • mới bắt đầu

Ý nghĩa của tất cả các chương trình này là bắt đầu các dịch vụ như

  • dbus cho phép giao tiếp giữa các ứng dụng để một ứng dụng có thể gọi các chức năng từ một ứng dụng đang chạy khác. Đây là một cái gì đó thường không hiển thị cho người dùng, ví dụ: một ứng dụng gọi trình quản lý cửa sổ để đặt cửa sổ của chính nó vào tiêu điểm
  • đăng nhập cho phép người dùng đăng nhập vào thiết bị đầu cuối CTRL_ALT_F *. Quá trình đăng nhập như được thấy bởi ps -A trong trường hợp systemd là systemd-logind (có thể lại thay đổi theo phân phối)
  • udev có rất nhiều tên, ví dụ với tôi, tôi tìm thấy nó với ps -A là systemd-udevd. Nó gán ví dụ: thiết bị xử lý trong / dev / cho các thiết bị bạn kết nối, ví dụ: đĩa USB
  • cron sẽ thực thi các lệnh dựa trên bảng thời gian trong / etc / crontab và cũng có tính năng "@reboot" để bắt đầu các lệnh khi khởi động.

10) quá trình đăng nhập, được xử lý bởi systemd sẽ chờ đăng nhập trên thiết bị đầu cuối ảo, thông thường có thể truy cập bằng cách nhấn CTRL_ALT_F1

11) thông thường và theo mặc định, quy trình init sẽ khởi động trình quản lý hiển thị, ví dụ: kdm (trình quản lý hiển thị KDE) hoặc xdm

12) trình quản lý hiển thị sẽ khởi động hệ thống đồ họa. Thực tế không có hệ thống đồ họa nào ngoài Xorg (hildon dành cho các thiết bị nhúng).

13) trình quản lý hiển thị sẽ khuyên máy chủ Xorg hiển thị màn hình đăng nhập


Bây giờ quá trình khởi động đã hoàn tất và máy tính chờ người dùng đăng nhập.


14) khi đăng nhập người dùng trong trình quản lý hiển thị sẽ bắt đầu môi trường máy tính để bàn như KDE, Gnome hoặc XFCE4. Quá trình root cho phiên KDE của người dùng sẽ được gọi là startkde, quá trình root cho Gnome sẽ được gọi là gnome-session, quá trình root cho XFCE4 sẽ được gọi là phiên xfce4

15) KDE thường khởi động tất cả các tệp thực thi từ ~ / .kde / Autostart và các tệp .desktop từ / etc / xdg / autostart (xem tác vụ lập lịch ).

16) Khi người dùng đã đăng nhập bằng đồ họa và nhấp vào biểu tượng để mở bảng điều khiển, thông thường bash sẽ được thực thi. Bash trước tiên sẽ thực thi .bashrc sau đó

17) Khi người dùng mở một bản ghi đăng nhập, điều này có nghĩa là anh ta cần đăng nhập thông qua mật khẩu hoặc khóa được ủy quyền. Anh ta có thể làm điều này trên bảng điều khiển CTRL_ALT_F1 hoặc bằng cách vào máy tính, ví dụ localhost. Sau đó, các tập lệnh .sh từ /etc/profile.d và .bashrc sẽ được thực thi.


1
Đây là một tổng quan tốt, chung về các bước để bắt đầu một hệ thống linux. Phần mềm cụ thể (ví dụ grub, lilo, u-boot) thay đổi nhưng chức năng là như nhau. Tôi nghi ngờ bạn quan tâm nhất đến quá trình init, vì vậy hãy tập trung vào các bước # 8 và # 9. sysvinit (/ etc / inittab) bị lỗi thời khá nhiều khi ủng hộ systemd HOẶC mới bắt đầu. Cả hai đều có thể chạy / giám sát các dịch vụ sysvinit.
dturvene

Không có ứng dụng nào gọi qua d-bus để tập trung vào cửa sổ. -
Robert Siemer

0

Câu trả lời là 42. Thorsten Staerk đã giải thích vấn đề chính trong các bình luận.

Để giúp bạn có được bức tranh lớn, bạn cần biết rằng phần mềm Linux và Nguồn mở được viết và duy trì bởi hàng triệu tình nguyện viên và công ty. Vì vậy, không dễ để theo kịp sự tăng trưởng.

Mặt khác, có rất nhiều tài liệu: các trang dành cho mọi phần mềm, một lời giải thích tốt về D-Bus là gì, danh sách gửi thư của nhà phát triển, Google , v.v. Vì vậy, hãy dành vài năm và đọc tất cả các gói tài liệu mà bạn quan tâm. Nếu bạn cần nó nhanh hơn, chỉ cần hỏi một số câu hỏi hay tại Unix & Linux .

Chúc may mắn.


Biết tất cả mọi thứ về cách vận hành máy đánh trứng điện cho tôi không biết gì về cách làm bánh. Bạn đọc tất cả các gói tài liệu mà bạn quan tâm. Đây là một câu trả lời khá vô dụng. Các tài liệu bạn đề cập cho tôi biết những gì những điều này làm. Nhưng tôi muốn biết chúng được dùng để làm gì. Bạn chỉ cần hỏi một số câu hỏi hay. Câu hỏi của tôi rất đơn giản và dễ hiểu: Tài liệu ở đâu?
stefan

1
Có lẽ bạn sẽ cần học cách hỏi để có được câu trả lời mà bạn mong đợi. Trong trường hợp này, tôi muốn chỉ cho bạn một Câu hỏi thường gặp rất hữu ích Cách đặt câu hỏi Cách thông minh

0

Trước khi tôi đưa ra phiên bản trả lời của mình, hãy để tôi bắt đầu với một vài định nghĩa

Linux == 'Hạt nhân hệ điều hành "Hệ thống Linux ==" Một số loại hệ thống được xây dựng xung quanh nhân Linux "Phiên trên hệ thống Linux ==" Một số bộ chương trình người dùng liên quan chạy trên hệ thống linux "

Bạn càng rời xa kernel, hai "hệ thống" càng ít có khả năng thực sự có điểm chung. Điều đó có nghĩa là thực sự không có bất kỳ định nghĩa hợp lý nào về "Phiên Linux hiện đại"

Thành thật mà nói, kỳ vọng rằng sẽ có một số loại tài liệu hệ thống bao quát cung cấp cho bạn tất cả các thành phần là một kỳ vọng sẽ không được đáp ứng trong hầu hết các phần của thế giới nguồn mở. Các nhà phát triển nguồn mở đang viết các chương trình để giải quyết (hoặc giải quyết lại!) Các vấn đề cụ thể mà họ quan tâm - vì vậy họ sẽ chỉ ghi lại phần đó - nếu vậy! :-)

Bạn có thể may mắn hơn với các hướng dẫn có sẵn với các bản phân phối linux thương mại, tuy nhiên với bản chất bảo thủ của hầu hết những thứ đó, bạn có thể lập luận rằng các bản phát hành của chúng không "hiện đại"!

Lời khuyên chính mà tôi đưa ra là các hệ thống unix / linux có ý nghĩa rất chung là theo kiểu gia truyền. Tôi thường nói với mọi người rằng tôi thích các hệ thống nix vì tôi có thể bắt đầu với init và từ đó, hiểu mọi thứ đang diễn ra trên một hệ thống. Systemd và bạn bè đã thay đổi điều đó một chút, nhưng nguyên tắc cơ bản là như nhau - bắt đầu từ trên xuống và làm việc xuống - "các chương trình tạo nên một phiên" nói chung là những chương trình bắt đầu từ thời điểm bạn bước vào gia truyền. Vì vậy, nếu bạn ssh in, có lẽ bạn sẽ nhận được bất cứ cái vỏ mặc định nào của bạn, vì đó là cách ssh hoạt động. Nếu bạn đăng nhập thông qua giao diện đồ họa, bạn sẽ nhận được bất cứ điều gì được bắt đầu bởi trình quản lý đăng nhập của bạn, vì đó là cách trình quản lý đăng nhập của bạn hoạt động

Rất nhiều khung máy tính để bàn làm cho việc này khó hơn một chút, bằng cách chạy các trình tiện ích dịch vụ cấp độ người dùng hoặc hệ thống khác nhau - và đôi khi, chúng sẽ được bắt đầu theo yêu cầu khi chương trình đầu tiên cần chúng khởi động - nhìn vào các tùy chọn dòng lệnh của các chương trình bạn đang chạy, có nhiều tùy chọn có khả năng ngăn chặn hành vi này và chạy ứng dụng ở chế độ "trần".

Thật không may, điều này không có nghĩa là "đọc tài liệu chương trình riêng lẻ" là cách duy nhất để hiểu tất cả và không có "bộ daemon tối thiểu" cho một phiên - chỉ có cách phân phối nhất định hoạt động cho một phiên nhất định phương thức đăng nhập / truy cập và phân phối, máy tính để bàn và phương thức đăng nhập cụ thể.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.