GNU/Linux >> Belajar Linux >  >> Linux

Konfigurasikan Toggleshowdesktop Di Openbox Untuk Hanya Bertindak Pada Lapisan Tertentu?

Saya memiliki ikatan kunci untuk ToggleShowDesktop . Saat saya menekan Menu , semua jendela diminimalkan dan saya melihat Wallpaper Desktop saya (seperti yang diharapkan):

<keybind key="Menu">
  <action name="ToggleShowDesktop"/>
</keybind>

Sekarang masalahnya adalah, saya tidak ingin melihat wallpaper saya. Saya menggunakan terminator sebagai wallpaper saya, yaitu ketika saya memulai terminator , itu ditempatkan pada lapisan di bawah ini:

<application name="terminator">
  <focus>yes</focus>
  <layer>below</layer>
  <desktop>1</desktop>
  <position>
    <y>0</y>  
    <x>0</x>
  </position> 
  <skip_taskbar>yes</skip_taskbar>
  <maximized>true</maximized>
</application>

Apakah mungkin untuk mengonfigurasi ToggleShowDesktop sehingga meninggalkan lapisan "bawah" tidak terpengaruh? yaitu saya hanya ingin jendela normal diminimalkan, tetapi bukan terminator . Dengan kata lain, saya ingin terminator berperilaku seperti wallpaper biasa – tidak terpengaruh oleh ToggleShowDesktop .

Saya menggunakan Debian Wheezy dengan LXDE .

(menggunakan metode yang disarankan oleh @Suchipi):

Saya telah meninggalkan beberapa detail dari pertanyaan awal saya, dan sekarang detail ini tampaknya relevan:

Pengaturan saya memiliki 2 monitor dan 4 desktop virtual. Jadi saya punya "8 wallpaper" untuk diisi dengan terminator . Dari apa yang saya baca sebelumnya, saya berasumsi bahwa 8 jendela ini harus dapat dibedakan, jadi saya telah membuat 8 symliks ke terminator , .yaitu:

/usr/bin/terminator-wallpaper-1a  -> terminator
/usr/bin/terminator-wallpaper-1b  -> terminator
/usr/bin/terminator-wallpaper-2a  -> terminator
...

Akibatnya dibuat 8 aplikasi yang berbeda (dengan nama yang berbeda).

Demikian pula, di .config/openbox/lxde-rc.xml Saya tidak punya 1, tapi 8 definisi:

<application name="terminator-wallpaper-1a">
  <desktop>1</desktop>
  <position>
    <monitor>1</monitor>
  </position>
  ...
</application>

<application name="terminator-wallpaper-1b">
  <desktop>1</desktop>
  <position> 
    <monitor>2</monitor>
  </position>
  ...
</application>

<application name="terminator-wallpaper-2a">
  <desktop>2</desktop>  
  <position> 
    <monitor>1</monitor>
  </position>
  ...
</application>

Dan terakhir, di /.config/autostart Saya punya 8 *.desktop file, yang akan dimulai secara otomatis setelah login:

/.config/autostar/terminator-wallpaper-1a.desktop
/.config/autostar/terminator-wallpaper-1b.desktop
/.config/autostar/terminator-wallpaper-2a.desktop

Bagi saya ini tampaknya terlalu rumit dan tidak elegan, tetapi saya tidak melihat cara yang lebih baik untuk melakukannya.

Sekarang, ketika saya mengikuti instruksi dari @Suchipi, hal berikut terjadi:

1) bagian dengan devilspie bekerja dengan baik. Ternyata, saya hanya perlu satu definisi yang mencakup semua 8 jendela saya (menggantikan matches untuk is ):

$ cat .devilspie/terminator.ds 
(if
(matches (application_name) "terminator-wallpaper")
(begin
(wintype "desktop")
)
)

Dan saya bisa melihat dengan obxprop bahwa itu berfungsi seperti yang diharapkan.

$ obxprop | egrep '(_OB_APP|_NET_WM_WINDOW_TYPE)'
_OB_APP_TYPE(UTF8_STRING) = "normal"
_OB_APP_TITLE(UTF8_STRING) = "None"
_OB_APP_CLASS(UTF8_STRING) = "Terminator-wallpaper-1"
_OB_APP_NAME(UTF8_STRING) = "terminator-wallpaper-1"
_OB_APP_ROLE(UTF8_STRING) = 
_NET_WM_WINDOW_TYPE(ATOM) = _NET_WM_WINDOW_TYPE_DESKTOP

2) sekarang bagian dengan xdotool lebih rumit:
pertama-tama, menggunakan 100% untuk resolusi tidak berfungsi, yaitu jendela menghilang (saya tidak melihatnya). Saat menggunakan statis:

xdotool search --class "Terminator-wallpaper-1a" windowunmap --sync windowmap windowsize %1 1920 1056

ini berfungsi untuk monitor desktop 1 1. Tetapi ketika saya menjalankannya untuk desktop lain, itu tidak berpengaruh, yaitu:

xdotool search --class "Terminator-wallpaper-2a" windowunmap --sync windowmap windowsize %1 1920 1056

Sebenarnya, ini juga berfungsi untuk desktop lain, tetapi hanya jika saya menjalankan xdotool perintah pada desktop tertentu, yang ingin saya pengaruhi. yaitu saya harus beralih ke desktop 2 dan jalankan xdotool search --class "Terminator-wallpaper-2a" dan kemudian berhasil.

Juga, saya bertanya-tanya apakah windowsize %1 memainkan peran apa pun di sini.

PERBARUI 07-12-2019:

jadi, saya sekarang mencoba mengatur sistem yang sama di Debian Buster (Openbox 3.6) dan saya mengalami masalah baru. Saya menduga beberapa properti telah berubah di versi baru openbox.

Semuanya tampak seperti sebelumnya, yaitu:

terminator-wallpaper-1a --profile wallpaper -b &
terminator-wallpaper-1b --profile wallpaper -b &
xdotool search --class 'Terminator-wallpaper-1a' windowunmap --sync windowmap windowsize %1 1920 1180 
xdotool search --class 'Terminator-wallpaper-1b' windowunmap --sync windowmap windowsize %1 1920 1180

Saya mendapatkan dua terminal sebagai wallpaper. Tapi masalahnya, hanya satu dari terminal ini yang benar-benar dapat digunakan. Yang lainnya adalah "tidak fokus" dan bahkan ketika saya mengkliknya dengan mouse, saya tidak dapat membuatnya fokus. Yaitu, saya dapat melihat terminal, tetapi saya tidak dapat mengetik di dalamnya.

Terkait:Konfigurasikan postfix untuk menerima email dari dua WAN?

Masalah ini tidak ada sebelumnya, di versi Openbox yang lebih lama

Bagaimana cara memperbaiki masalah ini?

Jawaban yang Diterima:

Openbox akan memberikan fungsionalitas yang Anda cari ke windows yang _OB_APP_TYPE properti diatur ke "desktop" (Anda dapat menggunakan obxprop untuk memeriksa properti jendela).
Jadi kita perlu mengatur _OB_APP_TYPE untuk jendela terminator Anda ke "desktop" sehingga ini akan terjadi.

Membaca kode sumber openbox, di client.c Saya dapat melihat _OB_APP_TYPE diwarisi dari _NET_WM_WINDOW_TYPE . Jadi saya mencari aplikasi yang bisa mengubah _NET_WM_WINDOW_TYPE . Aplikasi yang saya temukan bernama devilspie .

Pertama, instal:

sudo apt-get install devilspie

Selanjutnya, kita akan membuat folder untuk devilspie file konfigurasi:

mkdir ~/.devilspie

Sekarang kita akan menambahkan file konfigurasi yang memberitahu devilspie untuk mencari aplikasi bernama terminator dan atur jenis jendelanya ke desktop . Masukkan yang berikut ke dalam ~/.devilspie/terminator.ds :

(if
(is (application_name) "terminator")
(begin
(wintype "desktop")
)
)

Sekarang, jika Anda menjalankan devilspie (atau devilspie -a untuk mempengaruhi jendela yang ada, bukan hanya yang baru dibuat) Anda akan melihat jika Anda menggunakan obxprop pada terminator yang _NET_WM_WINDOW_TYPE telah berubah, tetapi _OB_APP_TYPE belum. Mari gunakan xdotool untuk membuka peta dan memetakan kembali jendela (dalam terminologi X11 ini berarti kita akan berhenti menggambar dan mulai menggambar jendela), yang akan memaksa openbox untuk memperhatikan nilainya.

Instal xdotool:

sudo apt-get install xdotool

Kemudian kita jalankan script berikut untuk mencari terminator jendela, hapus petanya, tunggu sampai tidak dipetakan, lalu petakan kembali. Kami juga mengubah ukuran jendela karena ketika tidak dipetakan dan dipetakan ulang kehilangan maksimalisasinya:

xdotool search --class "terminator" windowunmap --sync windowmap windowsize %1 1024 768

Ganti 1024 768 dengan resolusi Anda. Perhatikan juga bahwa versi xdotool yang lebih baru daripada yang ditemukan di dukungan repo apt Debian menggunakan 100% 100% alih-alih resolusi statis. Anda dapat menemukan .deb paket untuk versi xdotool yang lebih baru di halaman googlecode xdotool.

Jendela terminator akan segera menjadi tidak didekorasi, dan jika Anda sekarang menggunakan obxprop , Anda akan melihat bahwa kedua nilai telah disetel dengan benar. Jika sekarang Anda menekan tombol yang Anda ikat ToggleShowDesktop hingga beberapa kali, jendela terminator akan selalu aktif.

Untuk membuat ini persisten, Anda harus menjalankan perintah ini saat login. Halaman Wiki LXDE untuk LXSession menunjukkan beberapa cara berbeda untuk melakukan ini (global, per-pengguna, per-profil, dll). Dengan asumsi Anda menginginkan pengaturan ini hanya untuk pengguna Anda dan di bawah profil LXDE (default), Anda ingin mengedit ~/.config/lxsession/LXDE/autostart dan tambahkan perintah yang kita jalankan, ingatlah bahwa perintah xdotool perlu dijalankan setelah jendela terminator telah dirender, jadi lakukan sesuatu seperti (sleep 1s & xdotool ...) . Anda juga dapat mengatur perintah ini sebagai keybinds di openbox jika diinginkan.

Terkait:Perintah Unix apa yang dapat digunakan sebagai semaphore/lock?
Linux
  1. Konfigurasi VNC pada CentOS 6 / RHEL 6

  2. grep hanya cocok dengan garis dalam rentang yang ditentukan

  3. Konfigurasikan IPTables pada host KVM untuk memblokir lalu lintas jembatan tamu

  1. Cara mengonfigurasi Jembatan Linux untuk bertindak sebagai Hub alih-alih Switch

  2. Tidak Dapat Menjalankan Perintah Konfigurasi:"tidak ada File Atau Direktori Tersebut"?

  3. Bagaimana Mengkonfigurasi Desktop Untuk Alamat Ip Statis?

  1. Cara mengkonfigurasi Openbox untuk desktop Linux Anda

  2. Cara menavigasi desktop GNOME Linux Anda hanya dengan keyboard

  3. Cara Menginstal dan Mengonfigurasi Klien SSH Putty di Desktop Linux