cara memindahkan aplikasi dari ruang kerja 1 ke 2 menggunakan perintah

12

Apakah ada cara saya bisa mengganti aplikasi yang berjalan di satu ruang kerja ke yang lain di baris perintah? Saya menggunakan Ubuntu 10,04

UPDATE1
Sesuai saran di bawah ini

 wmctrl -l
0x02200003 -1 bond Bottom Expanded Edge Panel
0x02200049 -1 bond Top Expanded Edge Panel
0x02000020  0 bond x-nautilus-desktop
0x04e00004  0 bond bond@bond: ~
0x0482a380  0 bond OMG! Ubuntu! | wmctrl - Chromium
0x05000072  0 bond how to shift applications from workspace 1 to 2 using command - Ask Ubuntu - Stack Exchange - Google Chrome

sekarang ketika saya mengetik

wmctrl -r :OMG! Ubuntu! | wmctrl - Chromium: -t 2 No window was specified.

Jadi bagaimana cara menggunakannya dengan benar apa kesalahan di atas?

UPDATE2
saya mencoba

wmctrl -r 0x05000072 -t 2

tetapi jendela tidak memiliki efek dan mereka tetap berada di ruang kerja yang sama.

Pengguna Terdaftar
sumber
Saya telah memperbarui jawaban saya dengan informasi yang lebih baik tentang penggunaan -r dan -i. Argumen ke -r harus dilampirkan dalam "tanda kutip" jika mengandung spasi. Jika argumen ke -r adalah id jendela, Anda juga perlu menentukan -i pada baris perintah.

Jawaban:

14

Jika Anda menggunakan pengelola jendela yang sesuai seperti Metacity (Unity 2-d), Anda dapat menggunakan wmctrl untuk mengalihkan jendela ke desktop lain. Sintaksnya adalah wmctrl -r :ACTIVE: -t <DESKTOP>. Anda juga dapat mengubah desktop saat ini menggunakan wmctrl -s <DESKTOP>. Nomor desktop mulai dari 0. Pada satu baris, ini akan menjadi:

wmctrl -r :ACTIVE: -t 1; wmctrl -s 1

Jika Anda ingin mengganti jendela selain yang aktif ke desktop lain, gunakan teks dari judul sebagai argumen untuk -r. Sebagai contoh:

wmctrl -r "Chromium" -t 1

Atau Anda dapat menggunakan wmctrl -ldaftar windows yang tersedia dan memberikan nomor id ke -r sebagai ganti string khusus :ACTIVE:. Saat melewati id, Anda juga perlu menambahkan -i. Sebagai contoh:

$ wmctrl -l
0x03e00189  0 hostname Ask Ubuntu - Chromium
$ wmctrl -i -r 0x03e00189 -t 2

(wmctrl dapat diinstal pada Ubuntu dengan sudo apt-get install wmctrl.) Sayangnya, ini tampaknya tidak berfungsi dengan Unity standar, sayangnya.

John S Gruber
sumber
@skyblue Great info.Lihat satu hal yang saya tidak jelas adalah bagaimana saya tahu tidak ada jendela desktop dan juga apa yang saya cari adalah misalkan chrome sedang berjalan dan saya ingin chrome untuk beralih dari desktop saya saat ini ke yang lain lalu bagaimana cara pergi untuk ini.
Pengguna Terdaftar
Jika Anda menggunakan browser Chrome (yang memiliki "Chromium" di judulnya, Anda harus dapat menggunakan wmctrl -r "Chromium" -t 1sebagai skyblue menyebutkan dalam jawabannya, selama Anda menggunakan window manager yang sesuai seperti Unity-2d.
John S Gruber
3

Berikut adalah skrip saya yang mengimplementasikan apa yang Anda minta: https://github.com/norswap/wmov/blob/master/wmov.sh

Dalam bentuk saat ini, ia dapat mengirim windows (dipilih dengan mencocokkan string case-insensitive terhadap judul substring, seperti untuk wmctrl -ropsi) ke desktop lain, baik dengan memilih nomor desktop eksplisit, atau dengan menunjukkan arah desktop dari saat ini Desktop.

Contohnya:

./wmov.sh mov "Google Chrome" 3 # sends Chrome to desktop 3 (bottom left)
./mov.sh mov Skype right # sends Skype to the desktop to the right of
                         # the current desktop (if any)

Memang berfungsi seperti yang dijelaskan dalam pos desgua. Ini juga kemampuan untuk mengirim windows ke ruang kerja lain.

Norswap
sumber
Saya suka solusi ini, karena dapat mengidentifikasi windows dengan kecocokan sebagian dari nama jendela, terutama berguna ketika program memodifikasi bagian dari nama mereka, tergantung pada konteksnya. Memanggil windows dengan nama lebih mudah daripada mencari PID mereka. Kekurangannya adalah bahwa jika ada beberapa jendela dengan string yang sama dalam namanya, seseorang tidak dapat memprediksi mana yang akan diambil oleh wmov.sh.
Andrew P.
3

Dimungkinkan untuk melakukan ini dengan xdotool, tetapi jika Anda menggunakan compizsolusi ini mungkin tidak berlaku, jadi harap diingat.

Untuk mengalihkan jendela tertentu (jendela aktif) ke ruang kerja yang berbeda, Anda bisa menggunakan

xdotool getactivewindow set_desktop_for_window 1

Atau untuk skrip Anda mungkin ingin mengganti jendela program tertentu ke ruang kerja yang diberikan dengan:

xdotool search --class firefox set_desktop_for_window %@ 1

Perintah ini mencari dan menemukan firefoxjendela dan mentransfernya ke ruang kerja 1, di mana mereka akan tampak diminimalkan. Untuk kembali firefoxke desktop default, cukup ganti 1 dengan 0 di akhir perintah. Untuk mengirim jendela lain ke ruang kerja lain, cukup ganti firefoxdengan nama program lain.

Sangat penting Anda gunakan %@untuk mewakili windows yang dilewati dari --searchparameter, seolah-olah Anda tidak ada windows akan ditransfer.

Untuk informasi lebih lanjut, lihat man xdotooldan manual Ubuntu online.


sumber
2

Jika Anda menggunakan compiz, maka lihat di sini di compiz wiki . Di sana Anda menemukan beberapa contoh. Lihatlah plugin "put".

Contoh

./compiz-dbus-send.py put put_viewport_right_key
nsg
sumber
1

Pertama, titik dua adalah bagian dari :ACTIVE:token ajaib untuk menunjukkan jendela aktif. Anda tidak menginginkannya secara normal. Kedua, Anda perlu mengutip string dengan spasi di dalamnya.

Anda juga bisa mendapatkan ID jendela ( 0x...pada awal setiap baris) dan menggunakannya daripada mencoba membuat judulnya berfungsi.

$ wmctrl -r 'OMG! Ubuntu! | wmctrl - Chromium' -t 2 # wherever it is, move it to 2
$ wmctrl -r 0x0482a380 -t 2 # same thing
geekosaurus
sumber
Cara lain untuk mendapatkan ID jendela adalah menjalankan xwininfodan kemudian klik pada jendela ID yang Anda inginkan.
geekosaur
Saya mencoba metode Anda tetapi tidak berpengaruh pada jendela yang dimaksud.
Pengguna Terdaftar
@ Pengguna Terdaftar: Manajer jendela apa? ( wmctrl -m)
geekosaur
maaf untuk keterlambatan Balas wmctrl -m Nama: compiz Kelas: N / A PID: N / A Jendela manajer "menampilkan desktop" mode: OFF
Pengguna Terdaftar
Hrm Saya akan menebak, berdasarkan saran untuk menggunakan plugin Compiz, bahwa Compiz tidak benar-benar mengimplementasikan spesifikasi EWMH sehingga wmctrltidak akan berfungsi. (Secara khusus, ia harus mendengarkan PropertyChangeacara di jendela root untuk properti tertentu dan kemudian menindaklanjuti konten dari properti tersebut.)
geekosaur
0

Dengan memodifikasi sedikit skrip yang diberikan sebagai solusi untuk pertanyaan ini , berikut ini "membawa" jendela yang diberikan ke ruang kerja saat ini (dalam compiz):

#!/bin/bash

SCREEN_W=$(xwininfo -root | sed -n 's/^  Width: \(.*\)$/\1/p')
SCREEN_H=$(xwininfo -root | sed -n 's/^  Height: \(.*\)$/\1/p')

NAME="$1"

wmctrl -xlG | awk -v NAME="$NAME" '$7==NAME {print $1}' | while read WINS; do wmctrl -ir "$WINS" -e "0,0,0,$SCREEN_W,$SCREEN_H"; done

exit 0

Jika ruang kerja yang sewenang-wenang diinginkan, maka itu masalah menambah / mengurangi yang sesuai $SCREEN_W/ $SCREEN_H, sebanyak ruang kerja jendela jauh dari target.

ivotron
sumber
0

Mencoba:

wmctrl -r “window name(or any string in the title)” -t `wmctrl -d | grep “workspace name” | cut -d" " -f1`

izinkan saya menjelaskan: dalam bantuan acara wmctrl

    -r <WIN> -t <DESK>   Move the window to the specified desktop.
    <DESK>               A desktop number. Desktops are counted from zero.
    <WIN>          This argument specifies the window. By default it's
                   interpreted as a string. The string is matched
                   against the window titles and the first matching
                   window is used. The matching isn't case sensitive
                   and the string may appear in any position
                   of the title.

                   The -i option may be used to interpret the argument
                   as a numerical window ID represented as a decimal
                   number. If it starts with "0x", then
                   it will be interpreted as a hexadecimal number.

wmctrl -d dapat mendaftar semua ruang kerja, di komputer saya sekarang menunjukkan sebagai berikut:

0 - DG: 1600x900 VP: N / A WA: 0,0 1600x868 kode
1 * DG: 1600x900 VP: 0,0 WA: 0,0 1600x868 bermain 
2 - DG: 1600x900 VP: N / A WA: 0,01600x868 riset

* berarti ruang kerja saat ini

BTW, wmctrl -ladalah untuk mendaftar semua jendela (yang sudah Anda ketahui), di komputer saya sekarang mereka adalah:

0x05400008 1 pengguna-LinuxMint Terminal
0x03a0008e 0 pengguna-LinuxMint Mozilla Firefox


karena "MEJA" harus berupa angka, saya gunakan grep “workspace name” | cut -d" " -f1untuk mendapatkannya.

Misalnya, jika saya ingin memindahkan "kode" Firefox ke ruang kerja, saya dapat menggunakan:

wmctrl -r "firefox" -t 0 

atau

wmctrl -r "moz" -t `wmctrl -d | grep "code" | cut -d" " -f1`

tapi

wmctrl -r -i 0x03a0008e -t `wmctrl -d | grep "code" | cut -d" " -f1`

Kerjakan aku sekali saja, dan aku tidak tahu kenapa!

angin kencang
sumber