Setelah sekitar satu jam Googling ini, saya tidak percaya tidak ada yang benar-benar mengajukan pertanyaan ini sebelumnya ...
Jadi saya punya skrip yang berjalan di TTY1. Bagaimana saya membuat skrip itu meluncurkan beberapa program arbitrer di TTY2?
- Saya menemukan
tty
, yang memberi tahu Anda TTY saat ini. - Saya menemukan
writevt
, yang menulis satu baris teks ke TTY yang berbeda. - Saya menemukan
chvt
, perubahan TTY mana yang sedang ditampilkan.
Saya tidak ingin menampilkan TTY2. Saya hanya ingin skrip utama untuk melanjutkan eksekusi secara normal, tetapi jika saya secara manual beralih ke TTY2 saya dapat berinteraksi dengan program kedua.
[command] > /dev/tty2
(Anda harus sudah masuk ke tty2)?Jawaban:
Selama tidak ada lagi yang menggunakan TTY lainnya (
/dev/tty2
dalam contoh ini), ini harus bekerja. Ini termasukgetty
proses yang mungkin menunggu seseorang untuk masuk; memiliki lebih dari satu proses membaca inputnya dari TTY akan menghasilkan hasil yang tidak terduga.setsid
mengurus memulai perintah dalam sesi baru.Perhatikan bahwa Anda
command
harus mengaturstty
pengaturan dengan benar, mis. Hidupkan "mode matang" danonlcr
agar keluaran baris baru akan menambah carriage return, dll.sumber
/dev/stdin
,/dev/stdout
, dan/dev/stderr
.ps
dengan mudah menunjukkan bahwacommand
tidak memiliki terminal pengendali sama sekali dalam kasus Anda.sleep 1000
dan masih tidak berfungsi di sini. Saya menggunakan pseudo tty, meskipun (seharusnya tidak membuat perbedaan, saya kira).setsid sh -c 'exec sleep 1000 <>/dev/pts/4 >&0 2>&1'
di jendela terminal emulator./dev/pts/4
adalah jendela emulator terminal lainnya (pengguna yang sama, denganbash
menjalankan).Pada tty kedua biasanya akan ada program yang berjalan, baik program masuk atau beberapa shell seperti bash. Jika Anda ingin interaksi, Anda harus mengganti program login dengan milik Anda, atau memberi tahu shell untuk menjalankan program seolah-olah program tersebut dimulai dari commandline.
Solusi yang lebih sederhana, IMO, akan memulai
tmux
sesi setelah masuk ke layar kedua dan kemudian gunakan:untuk memulai program pada
tmux
sesi yang akan ditampilkan setelah Anda beralih ke terminal kedua.sumber
Saya baru saja menemukan:
Bagaimana saya bisa meluncurkan aplikasi dari 2 ttys saat peluncuran?
Salah satu komentar menyebutkan sesuatu yang disebut
openvt
. Perintah ini tampaknya melakukan hal yang persis saya kejar!http://linux.about.com/library/cmd/blcmdl1_openvt.htm
Kecuali ada yang tahu yang berbeda, saya pikir ini mungkin cara yang "benar" untuk melakukan ini.
(Saya baru saja mencobanya, dan sepertinya berfungsi dengan baik - meskipun
getty
sedang berjalan, ia mengambil terminal yang tidak digunakan berikutnya. Saya kira VTs tidak bisa "dibuka" sampai Anda beralih ke yang lain untuk mencoba masuk ...)sumber
saya memulai sesi grafis baru pada vt5 dengan mengikuti perintah
sebagai contoh :
Jika Anda ingin meluncurkan aplikasi grafis pada sesi grafis yang sudah aktif, Anda dapat melakukannya dengan:
sumber