Pertanyaan Menjalankan skrip saat memulai sebelum X dimulai di Ubuntu 9.10


Saya memiliki skrip yang ingin saya jalankan saat startup untuk mengubah X-configs tergantung pada lokasi, tetapi saya tidak dapat menemukan di mana harus meletakkannya agar dapat berjalan sebelum X dimulai. Ini mengakibatkan saya harus me-restart X agar menjalankan konfigurasi yang benar.

Saat ini, skrip saya berlokasi di /etc/init.d/whereami, dengan symlink di /etc/rc[2-5].d/S25whereami. Saya mencoba mencari tahu kapan X dimulai, jika masalahnya adalah masalahnya 25, tapi saya tidak bisa menemukan jawabannya ...

Bantuan apa pun dihargai.


2
2018-04-21 19:58


asal




Jawaban:


Ubuntu memulai X-windows dari GDM (untuk sistem yang menggunakan standar ubuntu-desktop) atau dari KDM (untuk sistem yang menggunakan kubuntu-desktop).

Untuk menjalankan skrip sebelum memulai GDM / KDM, Anda juga bisa

  1. Tulis skrip Upstart Anda sendiri untuk berjalan sebelum GDM; atau
  2. Ubah skrip GDM sistem Anda untuk menjalankan skrip eksternal khusus (misalnya, Anda /etc/init.d/whereami skrip) sebagai salah satu tugas awalnya.

Ubuntu menggunakan runlevel tipe Debian: runlevel 1 adalah single-user, mode pemulihan; runlevels 2-5 semuanya sama (GUI multi-user); dan secara default sistem boot ke runlevel 2.

Ubuntu 9.10 menggunakan Upstart, yang menyediakan skrip startup layanan / etc / init. Skrip init yang lebih tradisional di /etc/init.d dan /etc/rc.d masih tersedia untuk layanan yang belum diporting ke skrip init versi Upstart, tetapi GDM memilikinya. (Perhatikan Ubuntu 9.10 menyediakan /etc/init.d/gdm tetapi tidak menciptakan apa pun /etc/rcX.d symlinks untuk itu.)

Startup GDM dikontrol oleh / etc / init / gdm. Baris-baris ini di bagian atas skrip menentukan kapan untuk memulai dan menghentikan GDM. Perhatikan tidak ada runlevel spesifikasi untuk memulai GDM - hanya layanan yang harus dimulai terlebih dahulu.

start on (filesystem
          and started hal
          and tty-device-added KERNEL=tty7
          and (graphics-device-added or stopped udevtrigger))
stop on runlevel [0156]

emits starting-dm

Lihat pria 5 init untuk dokumentasi pada skrip Upstart, dan periksa sistem Anda /etc/init/*.conf file untuk beberapa contoh. Juga lihat mulai peristiwa manpage:

Contoh
  Layanan yang ingin dijalankan setiap kali layanan lain akan berjalan, dimulai sebelum dan berhenti setelah itu, mungkin menggunakan:

start on starting apache
stop on stopped apache

Tugas yang harus dijalankan sebelum tugas atau layanan lain dimulai mungkin menggunakan:

start on starting postgresql

Perhatikan juga bahwa skrip GDM / KDM Upstart memancarkan sinyal, memulai-dm, itu mungkin juga berguna.

Jadi skrip Upstart yang dirancang untuk dijalankan sebelum GDM harus menggunakan salah satunya mulai dari klausa:

# run only when starting GDM
start on starting gdm

# run when starting GDM or KDM
start on (starting gdm 
          or starting kdm)

# run when starting any DM
# starting-dm is a custom event emitted by the GDM/KDM/etc scripts
start on starting-dm

6
2018-04-22 09:23



Apakah ada cara bagi saya untuk menentukan bahwa skrip saya harus dijalankan sebelum gdm, tanpa harus memodifikasi skrip gdm.conf? Saya tidak perlu menerapkan modifikasi saya lagi setiap kali gdm mendapat upgrade. - Epcylon
@epcylon: lihat cara skrip gdm menentukan "mulai" ... "dan mulai hal"? yang mengacu pada /etc/init/hal.conf Skrip pemula. jadi ... hm ... baiklah, biar masukkan sisanya dalam jawaban. - quack quixote


Biasanya, X dimulai di runlevel 5, dan karena Anda ingin skrip Anda mulai sebelum X (dalam bentuk xdm / kdm / gdm), Anda akan memerlukannya untuk memiliki jumlah yang lebih rendah dari entri Sxxxdm. Jadi, pada sistem saya di sini, xdm dimulai dengan S111xdm, jadi Anda akan membutuhkan symlink /etc/rc5.d/S10whereami.


0
2018-04-21 20:24



Saya tidak memiliki entri SXXxdm di mana saja. Saya pikir saya menggunakan gdm (default untuk ubuntu), tetapi saya tidak dapat menemukan entri SXXgdm di mana pun. Itu sebagian masalah saya .. - Epcylon
Ah, ya, Ubuntu sejak 9.10 berarti Upstart, bekerja berbeda dari SysV tradisional, tetapi saya tidak tahu persis (belum menggunakannya), jadi Anda harus benar-benar memindahkan pertanyaan ini ke superuser.com :) - Sven
@epcylon: ubuntu mengikuti konfigurasi runlevel debian: runlevel 1 adalah single-user, dan runlevels 2-5 semuanya sama (GUI multi-user). dengan sepatu boot ubuntu default ke runlevel 2. - quack quixote