Apakah aplikasi berbasis GUI ini juga menjalankan perintah yang sama di latar belakang?
Iya dan tidak. Mereka menulis ke dconf
database pengaturan, tetapi mereka bisa menggunakan cara yang berbeda untuk melakukannya. Program yang ditulis dengan Python kemungkinan akan menggunakan gi.repository.Gio
modul (saya tahu karena saya sering menggunakannya) atau mereka dapat menggunakan gsettings
sebagai perintah eksternal dengan memanggil subprocess.Popen(['gsettings','org.some.schema','some-key','value'])
, dan pada dasarnya akan berjalan sebagai perintah shell. Program AC akan menggunakan sesuatu yang mirip, mungkin gio.h
perpustakaan, atau bahkan bisa menggunakan exec()
keluarga fungsi untuk melakukan hal yang sama seperti Popen
pada python. Jadi untuk menjawab pertanyaan judul Anda: "Apakah aplikasi berbasis GUI menjalankan perintah shell di latar belakang?" Mereka bisa, tetapi kemungkinan itu tidak perlu karena ada perpustakaan untuk bahasa apa pun yang ditulis aplikasi, dan kemungkinan itu akan menjadi sedikit lebih cepat untuk menggunakan fungsi perpustakaan, daripada menelurkan proses baru.
Untuk memberi Anda contoh bagaimana hal ini dilakukan dengan perpustakaan / modul, jangan ragu untuk melihat kode sumber indikator daftar peluncur saya . Di sana saya telah menulis sebuah fungsi untuk membuat turunan Gio.Settings
kelas dan kemudian menggunakannya untuk memodifikasi peluncur Persatuan tergantung pada jenis daftar yang ingin Anda miliki di sana.
Bagaimana cara mengintip kerja internal aplikasi ini? Maksud saya, apakah ada cara untuk benar-benar melihat perintah yang dieksekusi pada setiap klik tombol?
Tidak. Jika Anda ingin melihat perintah mana yang dikeluarkan dalam bahasa pemrograman aplikasi saat Anda menekan tombol atau mengklik elemen jendela, maka itu tidak mungkin. Baca kode sumber aplikasi, jika memungkinkan untuk mendapatkannya. Anda dapat menggunakan dconf watch /
untuk melihat pengaturan apa yang sedang diubah, tetapi tidak bagaimana hal itu dilakukan.
Secara teknis, jika Anda tahu cara mengoperasikan debugger, membaca alamat memori, dan mengetahui beberapa bahasa rakitan, maka Anda dapat mengetahui apa yang dilakukan aplikasi pada tingkat CPU dan memori. Ini dikenal sebagai rekayasa balik perangkat lunak dan sering digunakan oleh para profesional keamanan untuk menganalisis perangkat lunak berbahaya dan menemukan kerentanan dalam perangkat lunak yang sah.
Apakah aplikasi ini membuka terminal di latar belakang dan menjalankan perintah ini?
Tidak, tidak ada terminal yang terpasang. Banyak program tahu di mana dconf
basis data untuk pengguna berada dan menulis di sana. Ada juga bus komunikasi antar-proses yang dikenal sebagai dbus
, tempat program dapat mengirim sinyal, dan sebuah program akan seperti "Hei, itu pesan untuk saya!"
Tambahan
Bisakah aplikasi menjalankan aplikasi lain? Ya, itu dilakukan melalui panggilan standar fork()
dan execve()
sistem. Inti dari menciptakan proses di Linux dan sistem * nix lainnya sebagian besar didasarkan pada kedua hal ini. Mekanisme shell untuk menjalankan perintah non-builtin banyak menggunakan itu. Ketika Anda menjalankan secara interaktif
$ ls
shell akan membuat proses baru via fork()
, proses itu akan berjalan execve()
yang akan dimulai ls
. Karena bagaimana execve()
proses bercabang baru itu akan terjadi ls
. The pipe()
system call adalah apa yang akan membantu membaca kembali output ls
. Saya sangat menyarankan membaca jawaban saya untuk Apa perbedaan antara pipa dan pengalihan untuk memahami bagaimana mekanisme pipa bekerja - itu bukan hanya |
operator, tetapi sebenarnya syscall.
Bisakah aplikasi menjalankan perintah shell? Tidak. Sintaks shell hanya dipahami oleh shell itu sendiri. Apa yang dapat Anda lakukan, bagaimanapun, adalah memulai shell dengan -c
saklar baris perintah dan memberikan perintah yang sesuai. Ini sering digunakan untuk pintasan khusus yang diatur dalam GNOME atau lingkungan desktop lainnya, karena pintasan khusus beroperasi pada executable dan tidak ada shell untuk memahami sintaks. Jadi sebagai contoh, Anda akan lakukan bash -c 'xdotool key Ctrl+Alt+T'
untuk menjalankan xdotool
perintah atau bash -c 'cd $HOME/Desktop; touch New_File'
membuat file baru di desktop secara tidak langsung melalui pintasan. Ini adalah contoh yang sangat menarik karena Anda dapat menggunakan variabel shell, karena Anda menggunakan shell secara eksplisit.
Memata-matai apa yang terjadi
Sebagian besar yang dilakukan editor pengaturan ini dapat ditonton dengan menjalankan
di terminal.
gsettings
Juga sebagian besar waktu, untuk mencapai apa yang Anda lihat terjadi dengan perintah di atas, aplikasi ini perlu mengedit
dconf
database (lebih lanjut di bawah). Ini dapat dilakukan secara langsung , dengan menggunakan opsi cli dari dconf (yang tidak disukai), atau dengan menjalankangsettings
perintah yang sesuai , seperti yang Anda sebutkan.Untuk menjalankan perintah ini, tidak ada jendela terminal yang diperlukan, seperti yang Anda lihat pada contoh.
Tentang, gsettings, dconf, dan basis data dconf
gsettings
adalah cli frontend todconf
, yang pada gilirannya mengeditdconf
database, di mana sebagian besar pengaturan disimpan, dalam format biner. Lihat juga jawaban yang bagus ini .The
dconf
Database, by the way, juga dapat diedit dari GUI olehdconf
redaksi, yang dalam repositori:Sampel kerja
Sebuah. Dengan python
Untuk menunjukkan kepada Anda apa yang terjadi di bawah tenda, di bawah sampel yang berfungsi untuk beralih posisi peluncur Anda dari GUI dalam satu tombol (beralih):
file.py
jalankan dengan perintah:
...dan bersenang-senang.
b. Ikon peluncur
Bahkan peluncur sederhana dapat melakukan pekerjaan dari GUI:
setlauncher.desktop
Untuk penggunaan permanen, simpan di
~/.local/share/applications
(untuk penggunaan lokal) atau~/usr/share/applications
untuk semua pengguna.sumber