Berikut ini adalah pertanyaan lain yang saya pikir perlu saya ketahui:
Dari Sesi non X? (artinya root tidak masuk ke X)
Jika beberapa orang masuk pada X, bisakah saya mendeteksi secara otomatis siapa yang berada di layar mana, dan dengan demikian secara program mendeteksi layar mana yang saya perlukan untuk meluncurkan aplikasi?
Bisakah saya meluncurkan aplikasi sebagai pengguna? (ok saya 99,999% yakin ini adalah ya)
Bisakah saya mendeteksi jika pengguna grup X masuk ke X?
naga_plugged.pl
skrip selesai (atau bercabang di latar), karenaudev
akan menunggu keluarJawaban:
Untuk meluncurkan program grafis pada desktop pengguna, Anda perlu menemukan dua hal: tampilan apa yang digunakan desktop (alamat) dan cookie otorisasi apa yang digunakan (kata sandi).
Perintah berikut harus mencantumkan tampilan lokal tempat pengguna masuk (satu per baris) di sebagian besar unices:
Menemukan cookie otorisasi sedikit lebih sulit. Anda harus mencari file cookie pengguna, yang secara
~/.Xauthority
default (semua yang Anda butuhkan adalah lokasi file cookie, Anda tidak perlu mengekstrak cookie dari itu). Itu bekerja pada banyak sistem, tetapi tidak semua; itu tergantung pada manajer tampilan dan bagaimana pengaturannya, dan khususnya Gdm (default pada Ubuntu) tidak menggunakan lokasi default terakhir yang saya lihat. Saya tidak bisa memikirkan cara portabel untuk mengetahui file cookie X yang sebenarnya. Cara paling akurat untuk mengetahuinya adalah dengan mengetahui pid dari proses X dan mencari argumen untuk-auth
opsi tersebut. Cara lain adalah dengan menemukan proses yang berjalan pada server X itu dan ambilXAUTHORITY
variabel environmentemnt -nya . Jika Anda kesulitan menemukan file cookie, lihatBuka jendela pada tampilan X jarak jauh (mengapa "Tidak bisa membuka layar")?Setelah Anda memiliki kedua informasi, letakkan tampilan yang dipilih dalam
DISPLAY
variabel lingkungan, file cookie otoritas X yang dipilih dalamXAUTHORITY
variabel lingkungan, dan Anda siap. Tidak masalah apa pengguna menjalankan program; kombinasikan dengansu
jika Anda suka.sumber
ps
atauhtop
...pids=$(pgrep -u $target_user nautilus)
mendapat pid, dan di mana saya harus meletakkan-auth
opsi?-auth
opsi di mana pun. Anda mungkin perlu mencarinya di baris perintah proses server X untuk mengetahui apa yang harus dimasukkan ke dalamXAUTHORITY
variabel lingkungan. Jika Anda memiliki proses klien, yang Anda butuhkan bukanlah apa-apa-auth
selain nilaiXAUTHORITY
variabel klien itu . Saya tidak mengerti apa yang Anda coba lakukan. Anda mungkin ingin mengajukan pertanyaan baru.Saya tidak dapat sepenuhnya mencoba ini karena semua mesin saya telah dinonaktifkan root.
Untuk menemukan tampilan pengguna yang aktif, Anda dapat menggunakan
who
perintah. Kolom keluaran terakhir biasanya DISPLAY tempat pengguna masuk. Sesuatu seperti ini dapat digunakan untuk mengambil hanya tampilan (kemungkinan ada cara yang jauh lebih efisien untuk melakukan ini, jangan ragu untuk menawarkan suntingan):Kemudian untuk meluncurkan perintah X grafis pada tampilan itu:
di mana: 0 akan diganti dengan tampilan apa pun yang Anda temukan di perintah pertama dan firefox akan diganti dengan perintah apa pun yang ingin Anda jalankan. Anda bisa meletakkan ini dalam skrip shell dan cukup gunakan variabel.
Bagian selanjutnya adalah bagian yang belum saya uji, tetapi saya tidak melihat mengapa itu tidak mungkin dilakukan:
untuk meluncurkan perintah X sebagai pengguna itu.
sumber
sudo -i
dan tidak bisa memastikan apakah hasilnya akan berbeda daripada menjalankannya setelah masuk sebagai root secara langsung. :-)who | grep xeno| awk '{print $5}' | sed 's/[(|)]//g' | grep -v ^$
sepertinya berhasil ...Anda bisa melihat bagaimana acpid melakukannya. Misalnya ketika mengeluarkan perintah xscreensaver atau mengosongkan layar untuk setiap pengguna yang menjalankan sesi X atau X.
Misalnya di bawah Ubuntu file ini berisi hal-hal terkait:
Berisi loop ini:
sumber
/usr/share/acpi-support/power-funcs
. Ini panggilanfgconsole
untuk menemukan Linux vt aktif, kemudian mencari server X yang ditampilkan pada konsol ini, dan mencari tahu pengguna dari sana. Kemudian ia digunakan~/.Xauthority
sebagai cookie X, yang kecuali ada sesuatu yang saya lewatkan berarti itu tidak akan benar-benar dapat terhubung ke server X (pengaturan default Ubuntu, menggunakan gdm, tidak menyimpan cookie X di rumah pengguna) direktori).getXuser: command not found
Ekstensi untuk jawaban Gilles adalah bagaimana menemukan file cookie. Salah satu cara untuk melakukannya mungkin setelah Anda mengatur
DISPLAY
variabel lingkungan (seperti dijelaskan oleh Gilles), gunakanstrace
untuk menemukanxhost
akses file . Saya dapat memikirkan sesuatu seperti ini di BASH:Output dari kode di atas akan terlihat seperti:
Seperti yang Anda lihat dengan jelas, file cookie akan langsung muncul di sini.
sumber
Dalam penelitian saya untuk menemukan cara yang elegan untuk menampilkan tugas GUI atau X dari lingkungan terbatas seperti aturan udev atau dari pengguna super, saya baru-baru ini membuat alat yang sesuai dengan itu ( untuk lebih jelasnya ).
xpub
adalah skrip shell untuk mendapatkan variabel lingkungan tampilan X mengenai TTY saat ini atau yang diberikan.Ini adalah contoh dengan aturan udev:
$env{ENV}
: jika pengguna saat ini memulai X, jika tidak hapuslah.Prinsipnya sama untuk baris perintah menggunakan
export
:sumber