Saya memerlukan daftar dengan hanya aplikasi yang saat ini terbuka / berjalan di Dash, yang memiliki panah putih kecil di sisi kiri ikon.
Apakah ada cara untuk mendapatkannya?
14.04
unity-dash
process
launcher
ovidb
sumber
sumber
Jawaban:
Cara melakukannya dengan
qdbus
danorg.ayatana.bamf
antarmuka.Daftar aplikasi terbuka berdasarkan
.desktop
file:Menggunakan
org.ayatana.bamf.matcher.RunningApplications
danorg.ayatana.bamf.view.Name
metodesumber
Pertanyaan menarik.
Seperti biasa, ada berbagai cara untuk mendapatkan daftar aplikasi ini, masing-masing dengan kekurangan dan iklan tertentu.
Mendapatkan daftar proses, diwakili dalam Peluncur, menggunakan daftar jendela
Karena hanya aplikasi dengan jendela (yang dipetakan) yang muncul di Peluncur, menggunakan:
(
wmctrl
tidak terinstal secara default), kita bisa mendapatkan daftar windows yang dibuka dan proses milik windows. Format output adalah:di mana bagi kami informasi paling penting adalah:
0x05204641
); ini adalah jendela -id12618
); ini adalah id proses (pid) milik jendela, dan,verhaal (~) - gedit
); ini adalah nama jendelanya .Setelah kita memiliki pid, kita dapat mencari nama proses yang sesuai dengan perintah:
Kita dapat membuat skrip langkah-langkah di atas, dan daftar output untuk windows yang ada, terlihat seperti (menggunakan
python
):Komplikasi
Ini kelihatannya mudah. Namun, seperti biasa, kenyataan sedikit lebih rumit. Ada beberapa pengecualian dan komplikasi yang perlu kita tangani:
Idle
(python
IDE) atautkinter
jendela semacam itu.wmctrl
, tetapi tidak muncul secara terpisah di Dash.LibreOffice
mana semua modul memiliki nama prosessoffice.bin
. Pada saat yang sama, menjalankan perintahsoffice.bin
tidak akan berhasil. Dalam kasus Anda perlu mengidentifikasi modul (Calc
,Writer
dll) secara terpisah, Anda akan perlu untuk mendapatkan informasi tambahan, dari jendela nama misalnya.gnome-terminal
, seperti yang muncul dalam daftar proses, seperti pada output darips -e ww
. Di 14,04,gnome-terminal
muncul sebagaignome-terminal
, namun, dalam 15.04 / 15.10 itu menunjukkan:/usr/lib/gnome-terminal/gnome-terminal-server
.Apa yang perlu kita perbaiki setidaknya
Untuk memperbaiki masalah paling penting di atas, Anda perlu:
tambahkan tanda centang jika jendela itu adalah jendela "nyata" atau "normal", periksa
Jika output termasuk baris:
Jendela adalah jendela yang valid dalam arti Unity Launcher
gnome-terminal
di15.x
(dengan asumsi Anda ingin nama proses yang disajikangnome-terminal
), kita perlu menambahkan pengecualian, untuk mengubah nama proses menjadignome-terminal
jika muncul sebagai/usr/lib/gnome-terminal/gnome-terminal-server
Naskah
Cara Penggunaan
Kebutuhan skrip
wmctrl
:salin skrip di atas ke dalam file kosong, simpan sebagai
get_running.py
jalankan dengan perintah:
Ini akan menampilkan seperti:
atau, jalankan dengan argumen
-list
:Catatan
Dari pertanyaan Anda, tidak sepenuhnya jelas apa sebenarnya tujuan daftar yang ditemukan. Jika Anda perlu memiliki nama aplikasi, seperti yang muncul di antarmuka (nama "dapat dibaca"), pendekatan yang sama sekali berbeda mungkin cocok:
.desktop
file/usr/share/applications
. Dalam kebanyakan kasus, kita dapat menyimpulkan nama proses dan nama antarmuka aplikasi dari.desktop
file -nya . Dengan menggunakan informasi ini, kami dapat membuat daftar aplikasi GUI yang berjalan relatif mudah, disajikan dengan nama "dapat dibaca".Namun dalam kasus ini, kenyataan juga lebih rumit daripada teori, seperti yang dijelaskan di sini .
sumber