komut kullanarak uygulamalar çalışma alanı 1'den 2'ye nasıl kaydırılır


12

Komut satırında bir çalışma alanında çalışan uygulamayı diğerine değiştirebilmemin bir yolu var mı? Ubuntu 10.04 kullanıyorum

UPDATE1
Aşağıdaki önerilere göre

 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

şimdi yazdığımda

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

Peki nasıl doğru kullanılır yukarıdaki hata nedir?

UPDATE2
denedim

wmctrl -r 0x05000072 -t 2

ama pencerelerin bir etkisi yoktu ve aynı çalışma alanında kaldılar.


Cevabımı -r ve -i kullanımı hakkında daha iyi bilgilerle güncelledim. -R argümanı boşluk içeriyorsa "tırnak işaretleri" içine alınmalıdır. -R argümanı pencere kimliğiyse, komut satırında da -i belirtmeniz gerekir.

Yanıtlar:


14

Metacity (Unity 2-d) gibi uyumlu bir pencere yöneticisi kullanıyorsanız, pencereyi başka bir masaüstüne geçirmek için wmctrl kullanabilirsiniz. Sözdizimi wmctrl -r :ACTIVE: -t <DESKTOP>. Mevcut masaüstünüzü kullanarak da değiştirebilirsiniz wmctrl -s <DESKTOP>. Masaüstü numaraları 0'dan başlar. Bir satırda bu şöyle olur:

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

Etkin pencereden başka bir pencereyi başka bir masaüstüne değiştirmek istiyorsanız, başlıktaki metni -r parametresi olarak kullanın. Örneğin:

wmctrl -r "Chromium" -t 1

Alternatif olarak wmctrl -l, kullanılabilir pencereleri listelemek ve özel dize yerine -r'ye kimlik numarasını iletmek için kullanabilirsiniz :ACTIVE:. Bir kimliği geçerken, -i eklemeniz de gerekir. Örneğin:

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

(wmctrl ile Ubuntu üzerine kurulabilir sudo apt-get install wmctrl.) Şu anda, bu ne yazık ki standart Unity ile çalışmıyor gibi görünüyor.


@skyblue Harika bilgi: Net olmadığım bir şey, masaüstü penceresini nasıl bilebilirim ve ayrıca aradığım şeyin kromun çalıştığını ve kromun mevcut masaüstümden diğerine geçmesini ve sonra nasıl geçileceğini istiyorum bunun için.
Kayıtlı Kullanıcı

wmctrl -r "Chromium" -t 1Unity-2d gibi uyumlu bir pencere yöneticisi kullandığınız sürece , Chrome tarayıcısını (başlığında "Chromium" olan) kullanıyorsanız , yanıtında skyblue'dan bahsedebilmelisiniz.
John S Gruber

3

İşte sorduğunuz şeyi uygulayan bir senaryom: https://github.com/norswap/wmov/blob/master/wmov.sh

Geçerli biçiminde, wmctrl -raçık bir masaüstü numarası seçerek veya masaüstünün geçerli yönünü belirterek pencereleri ( seçenek gibi, alt dizeler başlığıyla büyük / küçük harfe duyarlı olmayan bir dize eşleştirerek seçilir ) diğer masaüstlerine gönderebilir masaüstü.

Örneğin:

./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)

Gerçekten desgua'nın gönderisinde tarif edildiği gibi çalışır. Ayrıca diğer çalışma alanlarına pencere gönderme yetenekleri.


Pencere çözüm adının kısmi eşleşmesine sahip pencereleri tanımlayabildiğinden, özellikle de programlar içeriğe bağlı olarak adlarının bir kısmını değiştirdiğinde yararlı olduğundan bu çözümü beğendim. Pencereleri adıyla çağırmak, PID'lerini aramaktan daha kolaydır. Dezavantajı, adında aynı dizeye sahip birden çok pencere varsa, hangisinin wmov.sh dosyasının yakalanacağını tahmin edememesidir.
Andrew P.

3

Bunu yapmak mümkündür xdotool, ancakcompiz bu çözümü kullanıyorsanız geçerli olmayabilir, bu yüzden lütfen bunu aklınızda bulundurun.

Belirli bir pencereyi (etkin pencere) farklı bir çalışma alanına geçirmek için şunu kullanabilirsiniz:

xdotool getactivewindow set_desktop_for_window 1

Veya bir komut dosyası için belirli bir programın pencerelerini aşağıdakilerle belirli bir çalışma alanına geçirmek isteyebilirsiniz:

xdotool search --class firefox set_desktop_for_window %@ 1

Bu komut firefoxpencereleri arar ve bulur ve bunları küçültülecekleri çalışma alanı 1'e aktarır. firefoxVarsayılan masaüstüne geri dönmek için, komutun sonunda 1 yerine 0 yazın. Başka bir çalışma alanına farklı bir pencere göndermek için başka firefoxbir program adıyla değiştirin .

Parametre %@aktarılmamış gibi, --searchparametreden geçirilen pencereleri temsil etmek için çok önemlidir .

Daha fazla bilgi için, bkz. man xdotoolVe Ubuntu çevrimiçi yönetimleri.


2

Compiz kullanıyorsanız, buraya compiz wiki'sine bakın . Orada birkaç örnek bulabilirsiniz. "Put" eklentisine bakın.

Misal

./compiz-dbus-send.py put put_viewport_right_key

1

İlk olarak, iki nokta üst üste :ACTIVE:etkin pencereyi göstermek için sihirli simgenin bir parçasıdır . Normalde istemiyorsun. İkincisi, içinde boşluk olan dizeleri alıntılamanız gerekir.

Ayrıca, pencere kimliğini ( 0x...her satırın başlangıcında) alabilir ve başlığı çalıştırarak bunu kullanabilirsiniz.

$ wmctrl -r 'OMG! Ubuntu! | wmctrl - Chromium' -t 2 # wherever it is, move it to 2
$ wmctrl -r 0x0482a380 -t 2 # same thing

Pencere kimlikleri almanın başka bir yolu da çalıştırmak xwininfove kimliğini istediğiniz pencereye tıklamaktır.
geekosaur

Metodunuzu denedim ancak söz konusu pencerede herhangi bir etkisi olmadı.
Kayıtlı Kullanıcı

@Kayıtlı Kullanıcı: Hangi pencere yöneticisi? ( wmctrl -m)
geekosaur 21:11

gecikmeli cevap için üzgünüm Cevap wmctrl -m İsim: compiz Sınıf: Yok PID: Yok Pencere yöneticisinin "masaüstünü gösteren" modu: KAPALI
Kayıtlı Kullanıcı

Hrm. Tahmin edeceğim, Compiz eklentilerini kullanma önerilerine dayanarak, Compiz'in tam olarak EWMH spesifikasyonunu uygulamadığı wmctrliçin işe yaramayacak. (Özellikle, PropertyChangebelirli özellikler için kök penceresindeki olayları dinlemeli ve daha sonra bu özelliklerin içeriği üzerinde hareket
etmelidir

0

Bu soruya çözüm olarak verdiği komut dosyasını biraz değiştirerek , aşağıdaki geçerli çalışma alanına (compiz içinde) belirli bir pencere "getirir":

#!/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

Keyfi bir çalışma alanı isteniyorsa, o zaman ekleme / substracting meselesi tekabül $SCREEN_W/ $SCREEN_H, çalışma alanları gibi birçok kez bir pencere hedef birinden uzak olduğu gibi.


0

Deneyin:

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

açıklamama izin verin: wmctrl şovlarının yardımıyla

    -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 tüm çalışma alanlarını listeleyebilir, bilgisayarımda şimdi aşağıdaki gibi görünüyor:

0 - DG: 1600x900 VP: YOK WA: 0,0 1600x868 kodu
1 * DG: 1600x900 VP: 0,0 WA: 0,0 1600x868 oynatma 
2 - DG: 1600x900 VP: Yok WA: 0,01600x868 araştırma

* geçerli çalışma alanı anlamına gelir

BTW, wmctrl -ltüm pencereleri (zaten bildiğiniz) listelemek, şimdi bilgisayarımda:

0x05400008 1 kullanıcı-LinuxMint Terminali
0x03a0008e 0 kullanıcı-LinuxMint Mozilla Firefox


"MASA" sayı olması gerektiğinden, bunu grep “workspace name” | cut -d" " -f1elde etmek için kullanıyorum .

Örneğin, Firefox'u çalışma alanı "koduna" taşımak istersem şunu kullanabilirim:

wmctrl -r "firefox" -t 0 

veya

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

fakat

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

Sadece bir kez çalış, neden bilmiyorum!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.