Cách chuyển ứng dụng từ không gian làm việc 1 sang 2 bằng lệnh


12

Có cách nào để tôi có thể chuyển ứng dụng đang chạy trong không gian làm việc này sang không gian làm việc khác trên dòng lệnh không? Tôi sử dụng Ubuntu 10.04

CẬP NHẬT1
Theo đề xuất dưới đây

 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

bây giờ khi tôi gõ

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

Vậy làm thế nào để sử dụng đúng cách những sai lầm ở trên là gì?

CẬP NHẬT2
Tôi đã thử

wmctrl -r 0x05000072 -t 2

nhưng các cửa sổ không có tác dụng và chúng vẫn ở trong cùng một không gian làm việc.


Tôi đã cập nhật câu trả lời của mình với thông tin tốt hơn về việc sử dụng -r và -i. Đối số thành -r phải được đặt trong "dấu ngoặc kép" nếu nó chứa khoảng trắng. Nếu đối số thành -r là id cửa sổ, bạn cũng cần chỉ định -i trên dòng lệnh.

Câu trả lời:


14

Nếu bạn đang sử dụng trình quản lý cửa sổ tuân thủ như Metacity (Unity 2-d), bạn có thể sử dụng wmctrl để chuyển cửa sổ sang màn hình khác. Cú pháp là wmctrl -r :ACTIVE: -t <DESKTOP>. Bạn cũng có thể thay đổi máy tính để bàn hiện tại của bạn bằng cách sử dụng wmctrl -s <DESKTOP>. Số máy tính để bàn bắt đầu từ 0. Trên một dòng, đây sẽ là:

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

Nếu bạn muốn chuyển một cửa sổ khác ngoài cửa sổ đang hoạt động sang màn hình khác, hãy sử dụng văn bản từ tiêu đề làm đối số thành -r. Ví dụ:

wmctrl -r "Chromium" -t 1

Ngoài ra, bạn có thể sử dụng wmctrl -lđể liệt kê các cửa sổ có sẵn và chuyển số id thành -r thay vì chuỗi đặc biệt :ACTIVE:. Khi truyền id, bạn cũng cần thêm -i. Ví dụ:

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

(wmctrl có thể được cài đặt trên Ubuntu với sudo apt-get install wmctrl.) Hiện tại, điều này dường như không hoạt động với Unity tiêu chuẩn, thật không may.


@skyblue Thông tin tuyệt vời. Xem một điều tôi không rõ là làm thế nào để tôi biết cửa sổ máy tính để bàn không và cũng là điều tôi đang tìm kiếm là giả sử chrome đang chạy và tôi muốn chrome chuyển từ máy tính để bàn hiện tại của mình sang một cái khác cho điều này
Người dùng đã đăng ký

Nếu bạn đang sử dụng trình duyệt Chrome (có "Chromium" trong tiêu đề, bạn sẽ có thể sử dụng wmctrl -r "Chromium" -t 1như đề cập trên bầu trời trong câu trả lời của mình, miễn là bạn đang sử dụng trình quản lý cửa sổ tuân thủ như Unity-2d.
John S Gruber

3

Đây là một kịch bản của tôi thực hiện những gì bạn yêu cầu: https://github.com/norswap/wmov/blob/master/wmov.sh

Ở dạng hiện tại, nó có thể gửi các cửa sổ (được chọn bằng cách khớp chuỗi không phân biệt chữ hoa chữ thường với tiêu đề của chuỗi con, như đối với wmctrl -rtùy chọn) cho các máy tính để bàn khác, bằng cách chọn số máy tính để bàn rõ ràng hoặc bằng cách chỉ ra hướng của máy tính để bàn từ dòng điện máy tính để bàn.

Ví dụ:

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

Nó thực sự hoạt động như được mô tả trong bài viết của desgua. Nó cũng có khả năng gửi các cửa sổ đến các không gian làm việc khác.


Tôi thích giải pháp này, bởi vì nó có thể xác định các cửa sổ có một phần trùng khớp với tên cửa sổ, đặc biệt hữu ích khi các chương trình sửa đổi một phần tên của chúng, tùy thuộc vào ngữ cảnh. Gọi các cửa sổ theo tên dễ dàng hơn là tìm kiếm các PID của chúng. Hạn chế là nếu có nhiều cửa sổ có cùng một chuỗi trong tên, người ta không thể dự đoán cái nào wmov.sh sẽ lấy.
Andrew P.

3

Có thể làm điều này với xdotool, nhưng nếu bạn đang sử dụng compizgiải pháp này có thể không áp dụng được, vì vậy hãy ghi nhớ điều này.

Để chuyển một cửa sổ cụ thể (cửa sổ đang hoạt động) sang một không gian làm việc khác, bạn có thể sử dụng

xdotool getactivewindow set_desktop_for_window 1

Hoặc đối với tập lệnh, bạn có thể muốn chuyển cửa sổ của một chương trình cụ thể sang không gian làm việc nhất định với:

xdotool search --class firefox set_desktop_for_window %@ 1

Lệnh này tìm kiếm và tìm firefox(các) cửa sổ và chuyển chúng vào không gian làm việc 1, nơi chúng sẽ xuất hiện ở mức tối thiểu. Để trở về firefoxmàn hình nền mặc định, chỉ cần thay 1 bằng 0 ở cuối lệnh. Để gửi một cửa sổ khác đến một không gian làm việc khác, chỉ cần thay thế firefoxbằng một tên chương trình khác.

Điều quan trọng là bạn sử dụng %@để thể hiện các cửa sổ được truyền từ --searchtham số, vì nếu bạn không có cửa sổ nào sẽ được chuyển.

Để biết thêm thông tin, hãy xem man xdotoolvà các trang web Ubuntu trực tuyến.


2

Nếu bạn đang sử dụng compiz, thì hãy nhìn vào wiki compiz này . Ở đó bạn tìm thấy một số ví dụ. Nhìn vào plugin "đặt".

Thí dụ

./compiz-dbus-send.py put put_viewport_right_key

1

Đầu tiên, dấu hai chấm là một phần của :ACTIVE:mã thông báo ma thuật để chỉ ra cửa sổ đang hoạt động. Bạn không muốn nó bình thường. Thứ hai, bạn cần trích dẫn các chuỗi có khoảng trắng trong đó.

Bạn cũng có thể lấy ID cửa sổ ( 0x...ở đầu mỗi dòng) và sử dụng nó thay vì cố gắng làm cho tiêu đề hoạt động.

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

Một cách khác để lấy ID cửa sổ là chạy xwininfovà sau đó nhấp vào cửa sổ có ID bạn muốn.
geekizard

Tôi đã thử phương pháp của bạn nhưng nó không có tác dụng gì với cửa sổ được đề cập.
Người dùng đã đăng ký

@Registered Người dùng: Trình quản lý cửa sổ nào? ( wmctrl -m)
geekizard

xin lỗi vì đã chậm trễ Trả lời wmctrl -m Tên: compiz Lớp: N / A PID: Chế độ "hiển thị màn hình" của trình quản lý cửa sổ: TẮT
Người dùng đã đăng ký

Hrm. Tôi sẽ đoán, dựa trên các gợi ý để sử dụng plugin Compiz, Compiz không thực sự triển khai đầy đủ thông số EWMH nên wmctrlsẽ không hoạt động. (Cụ thể, nó phải lắng nghe các PropertyChangesự kiện trên cửa sổ gốc cho các thuộc tính cụ thể và sau đó hành động theo nội dung của các thuộc tính đó.)
geekizard

0

Bằng cách sửa đổi một chút tập lệnh mà nó đưa ra làm giải pháp cho câu hỏi này , phần sau đây "đưa" một cửa sổ đã cho vào không gian làm việc hiện tại (trong 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

Nếu một không gian làm việc tùy ý được mong muốn, thì đó là vấn đề thêm / trừ tương ứng $SCREEN_W/ $SCREEN_H, bao nhiêu lần khi không gian làm việc một cửa sổ cách xa mục tiêu.


0

Thử:

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

hãy để tôi giải thích: trong sự giúp đỡ của chương trình 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 có thể liệt kê tất cả các không gian làm việc, trong máy tính của tôi hiện hiển thị như sau:

0 - DG: 1600x900 VP: Không áp dụng WA: 0,0 1600x868 mã
1 * DG: 1600x900 VP: 0,0 WA: 0,0 1600x868 chơi 
2 - DG: 1600x900 VP: Không áp dụng WA: 0,01600x868 nghiên cứu

* có nghĩa là không gian làm việc hiện tại

BTW, wmctrl -llà liệt kê tất cả các cửa sổ (mà bạn đã biết), trong máy tính của tôi bây giờ chúng là:

0x05400008 1 người dùng-LinuxMint Terminal
0x03a0008e 0 người dùng-LinuxMint Mozilla Firefox


vì "MÔ TẢ" phải là số, tôi sử dụng grep “workspace name” | cut -d" " -f1để lấy nó.

Ví dụ: nếu tôi muốn chuyển Firefox sang "mã" không gian làm việc, tôi có thể sử dụng:

wmctrl -r "firefox" -t 0 

hoặc là

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

nhưng

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

Chỉ cần làm việc cho tôi một lần, và tôi không biết tại sao!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.