Bagaimana cara saya menjalankan skrip pada login / logout Persatuan?

8

Saya memiliki dua skrip - satu untuk me-mount beberapa folder di atas SSHFS - dan satu untuk meng-unmount.

Saya ingin meluncurkan skrip mount ketika desktop Ubuntu default saya diluncurkan (setelah saya login di konsol grafis) - dan skrip unmount ketika saya "Log Out ..." dari roda gigi di kanan atas desktop.

Tolong bisakah seseorang memberi tahu saya cara mencapai ini? Apa kait paling nyaman / standar untuk menjalankan perintah pada peluncuran / keluar desktop?

aSteve
sumber
Saya tidak berharap waktunya menjadi kritis. Yang penting adalah bahwa skrip pertama dijalankan dalam satu detik atau lebih ... sebelum pengguna meluncurkan aplikasi secara interaktif. Saat keluar, penting bahwa skrip kedua dijalankan sebelum orang lain masuk pada konsol.
aSteve
Saya memiliki akses root. Menginstal paket tidak masalah. Jika memungkinkan, saya hanya ingin menggunakan hak istimewa tingkat pengguna - dengan asumsi ada cara yang rapi untuk melakukannya. Script saya tidak perlu di-root. Saya mencari saran tentang cara terbaik untuk memulai skrip saya di Unity start / stop ... Sebagian besar pengalaman Linux / Unix saya dalam konteks non-GUI. Dengan XWindows old-school dan window manager vanilla, saya bisa melakukan ini dari .xinitrc. Apa cara terbaik dengan desktop modern, default, Unity?
aSteve
Saya tidak ingin membuat tindakan log-off bergantung pada apa yang / tidak dipasang ... Itu semua ditangani secara dinamis oleh skrip yang ada. Yang saya butuhkan adalah cara yang rapi untuk menjalankan skrip pertama saat masuk dan yang kedua saat log-off untuk sesi GUI di konsol. Saya telah menemukan "Aplikasi Startup" - tetapi itu hanya akan menyelesaikan setengah dari masalah.
aSteve
Saya tidak berpikir bahwa "aplikasi masuk" adalah strategi yang tepat untuk kedua skrip. Saya memiliki dua skrip ... satu mengatur segalanya untuk sesi GUI saya; yang lain membersihkan setelah sesi GUI. Keduanya harus dijalankan sebagai pengguna yang sama dengan sesi GUI. Tidak membutuhkan argumen. Saya perlu menemukan cara yang tepat untuk meluncurkan skrip - pada waktu yang tepat, itu saja. Tidak ada asumsi tentang apa yang sebenarnya harus dilakukan oleh skrip. Pertanyaan ini adalah semua tentang bagaimana cara menghubungkan acara yang bertepatan dengan log-on dan log-off Unity.
aSteve

Jawaban:

9

Mempertimbangkan kebutuhan Anda untuk menjalankan pekerjaan ketika Anda masuk ke Unity dan bukan untuk login lain, pekerjaan sesi pemula tampaknya sempurna.

Anda mungkin telah memperhatikannya: proses yang Anda jalankan setelah login GUI sedang dalam initproses kedua . Ini initadalah init pemula yang tepat, dan Anda dapat memulai dan menghentikan pekerjaan sesi berdasarkan peristiwa yang dipancarkan olehnya. Tidak diperlukan hak akses root sama sekali. Lebih baik lagi (atau lebih buruk tergantung pada perspektif), ini belum sepenuhnya didukung untuk sistem tanpa kepala. Login SSH tidak memulai init pengguna dari tes cepat yang saya buat tadi.

Untuk membuat pekerjaan sesi, buat .conffile baru di ~/.config/upstart. Itu adalah direktori utama default untuk pekerjaan sesi pemula ( $XDG_CONFIG_HOME/upstart), buat jika tidak ada. Inilah contoh pekerjaan:

tee ~/.config/upstart/myjob.conf <<EOF
description "My job"
start on desktop-start
stop on desktop-end

script 
       firefox 'http://upstart.ubuntu.com/cookbook/#session-job'
end script
EOF

Anda dapat mengontrolnya secara manual:

start myjob 
# or
initctl start myjob

The servicePerintah yang digunakan untuk mengontrol sistem pekerjaan (yang di /etc/init.datau /etc/init). Untuk mengontrol pekerjaan sesi, seseorang perlu menggunakan initctlperintah, yang digunakan untuk berinteraksi dengan pemula.

Lihat man upstart-eventslebih banyak acara yang dapat Anda gunakan.

muru
sumber
Saya tidak memperhatikan ... tapi ... Saya setuju - pekerjaan sesi pemula terlihat sempurna. Saya mungkin kehilangan sesuatu yang jelas ... tetapi telah membuat ~ / .config / pemula / myjob.conf (seperti di atas) ketika saya menjalankan "service myjob mulai" Saya mendapatkan "myjob: layanan yang tidak dikenal" Ada ide?
aSteve
Memecahkannya: Saya perlu menggunakan "mulai pekerjaan saya" bukan "layanan memulai pekerjaan saya". Perintah lain yang bermanfaat adalah "daftar initctl"
aSteve
@ aSteve maaf tentang itu. Saya memperbaikinya,
muru
Tidak masalah. Pendekatan pemula / sesi jelas terlihat benar. Yang mengatakan, saya belum mengidentifikasi cara terbaik untuk menggunakannya untuk menjalankan skrip start dan stop yang terpisah (berumur pendek). Bisakah saya menggunakan hanya 1 file .conf, atau saya perlu 2? Haruskah itu menjadi "layanan" atau "tugas"? Haruskah saya menggunakan pra / post mulai dan pre / post berhenti? Saya tidak perlu / ingin proses untuk berjalan antara mulai dan berhenti ... kecuali, saya kira, ada cara mudah untuk meletakkan ikon di bilah alat ... meskipun itu, mungkin, berlebihan - untuk tujuan saya.
aSteve
1
Akhirnya. Setelah banyak peretasan ... Saya telah menemukan bahwa saya perlu myendtask untuk dipecat "pada akhir sesi", bukan "pada akhir desktop". Ini agak kontra-intuitif, tetapi berhasil. (Akhirnya!)
aSteve
1

Solusinya adalah menggunakan tugas pemula. Saya membutuhkan dua tugas - satu dipecat ketika desktop diinisialisasi untuk pengguna; yang kedua saat sesi pengguna berakhir. Dua skrip berikut berfungsi untuk saya di bawah Ubuntu 14.04.

Di ~ / .config / upstart / desktopOpen.conf

description "Desktop Open Task"
start on desktop-start
task
script
# Commands to mount sshfs go here as shell-script.
end script

Di ~ / .config / upstart / desktopClose.conf

description "Desktop Close Task"
start on session-end
task
script
# Commands to unmount sshfs go here as shell-script.
end script

Jari saya bersilang bahwa acara ini akan terus memenuhi persyaratan dalam rilis Ubuntu mendatang. Saya pikir layak memposting solusi saya di sini - jika itu berguna bagi orang lain.

aSteve
sumber
-1

Berikut ini beberapa saran untuk menjalankan skrip setelah login:

Script StackOverflow Linux setelah bootup : Catatan Cliff adalah untuk meletakkan file * .sh Anda di /etc/profile.d.

Jika Anda ingin menjalankan skrip saat boot, berikut adalah beberapa saran untuk itu:

Script StackOverflow Linux setelah boot : Cliff note adalah menggunakan /etc/rc.local atau crontab.

Higgs
sumber
1
Tak satu pun dari opsi itu terlihat 'benar'. Saya hanya ingin menjalankan skrip ketika saya log-on / off dalam arti memulai / mengakhiri sesi persatuan. Saya tidak ingin menjalankan skrip saya setiap kali ada login baru. Log-on baru mungkin dimulai dari jarak jauh melalui ssh dll - tetapi saya tidak ingin ini mengeksekusi skrip karena mereka tidak memulai sesi Persatuan baru (di konsol).
aSteve