Dokumentasi: Arsitektur Sesi Linux


20

Saya mencari dokumentasi tinjauan umum yang baik yang menggambarkan tumpukan daemon dan layanan yang terlibat dalam sesi Linux modern. Walaupun telah membaca berbagai dokumentasi tentang dbus, dan systemd, saya masih belum mendapatkan gambaran besarnya.

Secara khusus, saya mencari jawaban untuk pertanyaan-pertanyaan ini (jangan menjawab pertanyaan, mereka hanya harus menjelaskan jenis dokumentasi apa yang saya cari):

  • Setelah masuk, proses manakah yang menjadi root dari sesi pengguna?

  • Proses mana yang harus dimulai, dan mengapa? Saya mencari jawaban Desktop-agnostik, tidak peduli apakah Gnome, KDE, FVWM, atau shell sederhana dimulai.

  • Apa peran yang dimainkan semua daemon ini? Siapa di antara mereka yang akan lari sendiri, yang bergantung pada orang lain? Yang mana harus dimulai oleh siapa, mengapa, dan untuk berapa lama? Dan siapa yang harus memelihara kebun binatang itu?

Aku bertanya, karena saya menemukan bahwa saya memiliki seluruh kebun binatang daemon berjalan setelah booting: systemd-journald, systemd-udevd, dbus-daemon, systemd-logind. Tapi tidak cukup: Selain ini, Running ultra-ringan PDF-viewer zathura lanjut Mempopulai sesi saya dengan dbus-launch, dbus-daemon, at-spi2-registryd, dan at-spi-bus-launcher, peluncuran kedua lagi dbus-daemon. Tak satu pun dari mereka ada di sana sebelumnya, tidak ada yang diundang, tetapi mereka akan tinggal di sekitar rumah, memberi saya perasaan menyeramkan, sampai saya log out. Saya yakin saya kehilangan sesuatu di sini ...

Contoh lain: Setelah masuk, saya systemdmenjalankan dengan pengguna saya UID, tetapi saya tidak tahu apa yang harus dilakukan (karena versi 206 saya pikir saya tidak seharusnya menggunakannya sebagai manajer sesi, kan?). Ini memiliki proses anak (sd-pam), yang saya gagal menemukan dokumentasi tentang.

Apa yang mereka lakukan? Apa ide di balik pengaturan ini?

Untuk memperjelas perspektif saya: Di "masa lalu" sudah cukup untuk mengetahui bahwa loginakan meluncurkan shell login saya ( bash, mengeksekusi ~/.profile), dan dari titik itu saya dapat terus membangun sesi, tergantung pada keadaan, mungkin meluncurkan screen, atau startx.


4
Pertanyaan ini tidak dapat dijawab karena setiap distro melakukan hal sendiri. Lebih buruk lagi, lingkungan desktop KDE dan GNOME sangat berbeda yang berkaitan dengan apa yang terjadi setelah Sistem X Windowing dimulai. Namun lebih buruk lagi, distro mengubah cara mereka melakukannya - Anda menyebutkan systemd yang relatif baru. Sekarang jika Anda menginginkan jawaban distribusi-agnostik, itu adalah "kernel Linux memulai init, dan yang lainnya tergantung pada bagaimana init dikonfigurasi". Jawaban ini sama dangkal dan luasnya, sedangkan untuk setiap jawaban mendalam Anda harus mempersempit pertanyaan Anda setidaknya untuk versi distribusi.
Thorsten Staerk

1
tolong pisahkan pertanyaan Anda. Sebagai contoh, saya dapat memberitahu Anda untuk mencari sesi gnome dan startkde sebagai proses "sesi root" yang membutuhkan penjelasan lebih lanjut.
Thorsten Staerk

1
@ thorsten-staerk: "tidak bisa dijawab karena setiap distro mengerjakan sendiri" Jadi, Anda mengatakan bahwa saya tidak dapat membuat asumsi tentang para diaken mana yang sedang berjalan? Saya benar-benar tidak percaya itu. Maaf, tetapi memecah pertanyaan tidak akan memberikan jawaban yang saya cari. Tetapi saya akan mencoba untuk ulang kata-kata "Desktop-agnostik": Saya mencari penyebut umum terendah, atau set minimum menjalankan diaken (dan pembenaran untuk masing-masing), diharapkan dalam sesi. Bagaimana mereka berinteraksi, dan bagaimana set ini berubah dengan berbagai jenis sesi (apakah ada dbusd dalam sesi terminal? Via SSH?)
stefan

1
Linux berjalan pada perangkat yang tidak memiliki apa-apa selain layar LCD. Ini juga berjalan pada ponsel yang tidak memiliki AppStore dan kamera. Ini juga berjalan pada Samsung Galaxy dan pada mainframe. Masuk akal - menggunakan beberapa Terabytes RAM dan dapat masuk ke beberapa kilobyte. Saya khawatir denominator umum terendah dari sesi Linux adalah Linux dan Anda memiliki "kebebasan memilih" yang terkadang jelek untuk memilih apa lagi yang Anda butuhkan. Untuk desktop, saya akan mencoba membuat daftar penyebut umum terendah tetapi Anda akan lebih baik mengajukan pertanyaan tentang dbus daripada "segalanya".
Thorsten Staerk

Jawaban:


8

Saya sangat tertarik dengan pertanyaan Anda sehingga saya menjawabnya di linuxintro . Inilah jawaban yang disesuaikan untuk pertanyaan Anda:

Saat PC tipikal dengan Linux seperti Fedora, SUSE atau Ubuntu melakukan booting langkah-langkahnya adalah sebagai berikut:

  1. BIOS menjalankan pemeriksaan sendiri
  2. BIOS memuat sektor boot dan menjalankannya
  3. Bootloader seperti grub atau lilo dijalankan
  4. Bootmenu ditampilkan (opsional)
  5. Kernel dimuat
  6. Disk RAM awal dimuat
  7. Kernel dieksekusi
  8. Kernel mengeksekusi init
  9. init dijalankan, tergantung pada distro Anda, versi dan konfigurasi Anda

    • Skrip init SysV atau
    • systemd atau
    • pemula

Arti dari semua program ini adalah untuk memulai layanan seperti

  • dbus yang memungkinkan komunikasi antar aplikasi sehingga satu aplikasi dapat memanggil fungsi dari aplikasi lain yang sedang berjalan. Ini adalah sesuatu yang biasanya tidak terlihat oleh pengguna, misalnya aplikasi yang memanggil window manager untuk memfokuskan jendelanya
  • login yang memungkinkan pengguna untuk masuk di terminal CTRL_ALT_F *. Proses login seperti yang terlihat oleh ps -A akan dalam kasus systemd menjadi systemd-logind (mungkin lagi bervariasi berdasarkan distribusi)
  • udev yang memiliki banyak nama, misalnya untuk saya, saya menemukannya dengan ps -A sebagai systemd-udevd. Ini menetapkan misalnya perangkat menangani / dev / ke perangkat yang Anda sambungkan, misalnya disk USB
  • cron yang akan menjalankan perintah berdasarkan tabel waktu di / etc / crontab, dan juga memiliki fitur "@reboot" untuk memulai perintah saat boot.

10) proses login, ditangani oleh systemd akan menunggu login di terminal virtual, satu biasanya dapat dicapai dengan menekan CTRL_ALT_F1

11) biasanya dan secara default, proses init sekarang akan memulai manajer tampilan, misalnya kdm (manajer tampilan KDE) atau xdm

12) manajer tampilan sekarang akan memulai sistem grafis. Praktis tidak ada sistem grafis kecuali Xorg (hildon untuk perangkat yang disematkan).

13) manajer tampilan akan menyarankan server Xorg untuk menampilkan layar login


Sekarang startup selesai dan komputer menunggu pengguna untuk masuk.


14) pada login pengguna, manajer tampilan akan memulai lingkungan desktop seperti KDE, GNOME atau XFCE4. Proses root untuk sesi KDE pengguna akan disebut startkde, proses root untuk GNOME akan disebut sesi gnome, proses root untuk XFCE4 akan disebut sesi xfce4

15) KDE biasanya memulai semua file yang dapat dieksekusi dari ~ / .kde / Autostart dan file .desktop dari / etc / xdg / autostart (lihat tugas penjadwalan ).

16) Ketika pengguna telah login secara grafis dan mengklik ikon untuk membuka konsol, biasanya bash akan dieksekusi. Bash akan menjalankan .bashrc terlebih dahulu

17) Ketika pengguna membuka shell login ini berarti ia harus login melalui kata sandi atau kunci yang diotorisasi. Dia dapat melakukan ini di konsol CTRL_ALT_F1 atau dengan ssh'ing ke komputer, misalnya localhost. Kemudian skrip .sh dari /etc/profile.d dan .bashrc akan dieksekusi.


1
Ini adalah gambaran umum yang bagus tentang langkah-langkah untuk memulai sistem linux. Perangkat lunak tertentu (misalnya grub, lilo, u-boot) berubah tetapi fungsinya sama. Saya menduga Anda paling tertarik dengan proses init jadi fokuslah pada langkah # 8 dan # 9. sysvinit (/ etc / inittab) cukup usang dalam mendukung systemd ATAU pemula. Keduanya dapat menjalankan / memonitor layanan sysvinit.
dturvene

Tidak ada panggilan aplikasi melalui d-bus untuk mendapatkan jendela fokus. -
Robert Siemer

0

Jawabannya adalah 42. Thorsten Staerk menjelaskan sudah masalah utama dalam komentar.

Untuk membantu Anda mendapatkan gambaran besar, Anda perlu tahu bahwa perangkat lunak Linux dan Open Source ditulis dan dikelola oleh jutaan relawan dan perusahaan. Jadi, tidak mudah untuk mengikuti pertumbuhan.

Di sisi lain, ada banyak dokumentasi: halaman manual untuk setiap bagian dari perangkat lunak, penjelasan yang baik tentang D-Bus , milis pengembang, Google dan sebagainya. Jadi perlu waktu beberapa tahun dan baca semua dokumen paket yang Anda minati. Jika Anda membutuhkannya lebih cepat, tanyakan saja beberapa pertanyaan bagus di Unix & Linux .

Semoga berhasil.


Mengetahui segalanya tentang cara mengoperasikan kocokan listrik tidak memberi tahu saya tentang cara pembuatan kue. “Baca semua dokumen paket yang Anda minati” - ini adalah jawaban yang agak tidak berguna. Dokumentasi yang Anda sebutkan memberi tahu saya apa yang dilakukan hal-hal ini. Tapi saya ingin tahu untuk apa mereka digunakan. “Ajukan saja beberapa pertanyaan bagus” - pertanyaan saya sederhana dan langsung: Di mana dokumentasinya?
Stefan

1
Mungkin Anda harus belajar cara bertanya untuk mendapatkan jawaban yang Anda harapkan. Dalam hal ini saya ingin mengarahkan Anda ke FAQ yang sangat berguna. Cara Mengajukan Pertanyaan dengan Cara Pintar

0

Sebelum saya memberikan versi jawaban saya, izinkan saya mulai dengan beberapa definisi

Linux == 'Kernel Sistem Operasi "Sistem Linux ==" Beberapa jenis sistem yang dibangun di sekitar Kernel Linux "Sesi pada Sistem Linux ==" Beberapa set program pengguna terkait yang berjalan pada sistem linux "

Semakin jauh Anda menjauh dari kernel, semakin kecil kemungkinan dua "sistem" akan memiliki kesamaan. Yang berarti bahwa sebenarnya tidak ada definisi yang masuk akal dari "Sesi Linux Modern"

Terus terang, harapan bahwa harus ada semacam dokumentasi sistem menyeluruh yang memberi Anda semua komponen adalah harapan yang tidak akan terpenuhi di sebagian besar dunia sumber terbuka. Pengembang Open Source sedang menulis program untuk memecahkan (atau memecahkan kembali!) Masalah khusus yang mereka pedulikan - jadi mereka hanya akan mendokumentasikan bagian itu - jika itu! :-)

Anda mungkin lebih beruntung dengan manual yang tersedia dengan distribusi linux komersial, namun mengingat sifat konservatif sebagian besar dari mereka, Anda dapat berpendapat bahwa rilis mereka tidak "modern"!

Saran utama yang saya berikan adalah bahwa sistem unix / linux yang sangat umum bersifat heirachical. Saya dulu memberi tahu orang-orang bahwa saya suka sistem nix karena saya bisa mulai dengan init, dan dari sana, mengerti semua yang terjadi pada suatu sistem. Systemd dan teman-teman telah mengubah itu sedikit, tetapi prinsip dasarnya sama - mulai dari atas dan turun - "program yang menyusun sesi" umumnya adalah program yang dimulai dari titik Anda memasuki pusaka. Jadi, jika Anda ssh, Anda mungkin hanya akan mendapatkan apa pun shell default Anda, karena itulah cara kerja ssh. Jika Anda masuk melalui antarmuka grafis, Anda akan mendapatkan apa pun yang dimulai oleh manajer login Anda, karena itulah cara kerja manajer login Anda

Banyak kerangka kerja desktop membuat ini sedikit lebih sulit, dengan menjalankan berbagai daemon layanan tingkat pengguna atau sistem - dan kadang-kadang, ini akan dimulai berdasarkan permintaan ketika program pertama yang membutuhkannya dimulai - lihat opsi baris perintah dari program yang Anda jalankan, ada beberapa opsi untuk menghentikan perilaku ini, dan jalankan aplikasi dalam mode "telanjang".

Sayangnya, ini berarti bahwa "membaca dokumentasi masing-masing program" adalah satu-satunya cara untuk memahami semuanya, dan bahwa tidak ada "set minimum daemon" untuk sebuah sesi - hanya ada cara distribusi yang diberikan bekerja untuk diberikan metode login / akses, dan distribusi thats, desktop, dan metode login khusus.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.