Ubuntu / Gnome: Buka aplikasi di ruang kerja tertentu


10

Bagaimana cara memberitahu aplikasi untuk membuka di ruang kerja tertentu?


Info lebih lanjut:

Saya suka memiliki C ++ IDE saya di workspace 2, Java IDE saya di workspace 3, dan email saya, browser dan lain-lain di workspace empat. Saya juga menggunakan skrip shell yang dijalankan setelah login:

#!/bin/bash
gnome-terminal & # WS 1
netbeans-6-9-1 & # WS2
qtcreator-2-0-1 & # WS 3
firefox & # WS 4
thunderbird & # WS 4

Tentu saja saat ini semuanya terbuka di ruang kerja saat ini ... Apakah ada cara bagi saya untuk menentukan ruang kerja di mana setiap perintah harus dimulai?

Terima kasih sebelumnya!


1
Jika Anda selalu menjalankan program ini, cara termudah dan paling sederhana adalah dengan memuat semuanya di tempat yang Anda inginkan dan 'mengingat aplikasi saat keluar'
Unfundednut

1
@MrStatic: Terima kasih atas sarannya, tetapi saya benar-benar membutuhkannya dalam skrip shell karena alasan lain - dan untuk itu saya tidak dapat 'mengingat aplikasi saat
logout

Jawaban:


4

Anda bisa menggunakan devilspie untuk menetapkan aturan untuk windows mana pergi di mana ruang kerja.

Lihat dokumen untuk contoh persisnya.

Tetapi MrStatic juga memiliki saran yang bagus. Cobalah yang pertama, Anda bahkan mungkin tidak memerlukan skrip shell Anda.

Jika Anda membutuhkannya untuk menjadi perintah yang dapat Anda gunakan dalam skrip shell, lihat wmctrl .


terima kasih atas sarannya, akan memeriksanya - saya masih akan mempertimbangkan solusi CLI-only sebagai solusi yang unggul, jadi jika Anda memiliki ide untuk itu, beri tahu saya!
bguiz

4
Coba wmctrl. Saya menambahkan tautan dalam jawaban saya di atas.
Mikel

7

Saya telah mencoba wmctrlalat ini dan menemukan bahwa solusi termudah yang berhasil bagi saya adalah memindahkan jendela dengan perintah berikut:

wmctrl -r <WindowName> -t <WorkspaceNumber>

Perhatikan bahwa nomor ruang kerja dimulai dari 0. Terakhir Anda dapat pindah ke ruang kerja pilihan Anda dengan perintah:

wmctrl -s <WorkspaceNumber>

1

Saya menggunakan struktur dasar ini dalam skrip untuk membuka satu set aplikasi tertentu di ruang kerja tertentu..contoh membuka terminal saya dan memindahkannya ke ruang kerja 1 ...

cd
gnome-terminal
until wmctrl -l | grep -q "me@mypc ~"; 
do
    sleep 0.1
done
wmctrl -r "me@mypc ~" -t 1

Sedikit penjelasan tentang kode ini akan diterima. Mengapa ini dimulai dengan cd? apa yang kamu harapkan sampai saat ini? is "me @ myspc ~" nama jendela ??
wranvaud

0

Instal wmctrl

sudo apt install wmctrl

Dan buat skrip (dalam contoh ini thunderbird di ruang kerja kedua ( -t 1)):

#!/bin/sh
(thunderbird &)  & sleep 5 && 
sh -c "wmctrl -i -r `wmctrl -l | grep Thunderbird` -t 1"

Untuk mengetahui nama aplikasi Anda di wmctrl Anda dapat melihatnya dengan mengetuk terminal Anda:

wmctrl -l

Dan ganti dengan nama yang benar di skrip.

Jadilah carrefull dengan huruf kapital ("Thunderbird" bukan "thunderbird") !!

Contoh lain dengan firefox di ruang kerja 3d ( -t 2):

#!/bin/sh
(firefox &)  & sleep 5 && 
sh -c "wmctrl -i -r `wmctrl -l | grep Firefox` -t 2"

Kerjakan Debain 10 dengan Cinnamon. Tetapi harus bekerja untuk semua


-1

Saya cukup yakin itu tidak mungkin dilakukan. Alasannya adalah karena lingkungan windowing seperti GNOME mengharapkan perangkat lunak untuk menangani hal ini, dan pembuat perangkat lunak mengharapkan lingkungan windowing untuk menangani hal ini.

Devilspie adalah ide yang bagus, tetapi cocok dengan pola (mis. Jika nama == 'google-chrome'). Jadi apa yang terjadi jika saya membuka dua browser? Mereka berdua dipindahkan ke ruang kerja yang sama? Saya memiliki 6x3 = 18 ruang kerja, masing-masing dengan instance chrome tertentu. Akan membantu jika saya bisa mengganti nama program-program ini (yaitu 'google-chrome1', 'google-chrome2' ...) tetapi saya tidak dapat menemukan cara untuk melakukan itu. Jadi kita harus menggunakan wmctrl.

wmctrl sedikit lebih baik b / c selain menggunakan judul jendela, Anda juga dapat menggunakan ID jendela atau hanya menggunakan jendela yang sedang disorot. ID jendela adalah sakit untuk mendapatkan b / c mereka tidak segera dihasilkan. Lihat di bawah

gedit 1.txt
#get window ID by looking at wmctrl -l store in windowID
wmctrl -i -r $windowID -e 0,3660,0,-1,-1

tetapi kemudian kontrol tidak dikembalikan ke baris perintah sampai SETELAH gedit keluar. Yang harus kita lakukan untuk menyiasati ini adalah memberi &tanda

gedit 1.txt &
#get window ID by looking at wmctrl -l store in windowID
wmctrl -i -r $windowID -e 0,3660,0,-1,-1

tetapi kontrol sekarang, 99,999% dari waktu, kembali ke baris perintah SEBELUM manajer jendela meluncurkan jendela dan tidak ada cara untuk menemukan id jendela. Kita harus mengatur teknik pengulangan yang sangat kompleks untuk menguji untuk melihat apakah ada jendela baru telah dibuat, dan untuk menebak apakah itu jendela yang kita cari.

Memeriksa jendela aktif melalui flag :ACTIVE:memiliki masalah yang sama, tidak menunggu program selesai berjalan.

wmctrlmenurut saya program yang sangat aneh. Sepertinya itu dirancang untuk orang tanpa mouse, atau tidak dapat secara fisik menyeret program mereka di seluruh ruang kerja.


OP mengatakan browser berjalan di ruang kerja empat. Jika perlu membuka browser di ruang kerja lain setelah skrip startup sesi berjalan, perintah terakhir dalam skrip itu bisa berupa sleep; pkill devilspie.
Mikel
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.