Ubuntu / Gnome: Mở một ứng dụng trong một không gian làm việc cụ thể


10

Làm thế nào để nói một ứng dụng để mở trong một không gian làm việc cụ thể?


Thêm thông tin:

Tôi muốn có C ++ IDE của tôi trong không gian làm việc 2, IDE Java của tôi trong không gian làm việc 3 và email, trình duyệt và linh tinh của tôi trong không gian làm việc bốn. Tôi cũng sử dụng tập lệnh shell thực thi khi đăng nhập:

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

Tất nhiên hiện tại tất cả đều mở trong không gian làm việc hiện tại ... Có cách nào để tôi chỉ định không gian làm việc mà mỗi lệnh nên bắt đầu không?

Cảm ơn trước!


1
Nếu bạn luôn có các chương trình này chạy, cách đơn giản và đơn giản nhất là tải tất cả chúng lên nơi bạn muốn và 'nhớ các ứng dụng khi đăng xuất'
Unundednut

1
@MrStatic: Cảm ơn bạn đã gợi ý, nhưng tôi cần nó ở dạng tập lệnh shell vì những lý do khác - và vì thế tôi không thể 'nhớ các ứng dụng khi đăng xuất'
bguiz

Câu trả lời:


4

Bạn có thể sử dụng devilspie để đặt quy tắc cho các cửa sổ đi vào không gian làm việc nào.

Xem các tài liệu cho một ví dụ về chính xác đó.

Nhưng MrStatic cũng có một gợi ý hay. Hãy thử cái đó trước, bạn thậm chí có thể không cần kịch bản shell của mình.

Nếu bạn cần nó là một lệnh bạn có thể sử dụng trong tập lệnh shell, hãy xem wmctrl .


cảm ơn về lời đề nghị, sẽ kiểm tra xem - tôi vẫn sẽ coi giải pháp chỉ dành cho CLI là một giải pháp ưu việt, vì vậy nếu bạn có bất kỳ ý tưởng nào cho một ý tưởng, hãy cho tôi biết!
bguiz

4
Hãy thử wmctrl. Tôi đã thêm một liên kết trong câu trả lời của tôi ở trên.
Mikel

7

Tôi đã thử wmctrlcông cụ này và thấy rằng giải pháp đơn giản nhất phù hợp với tôi là di chuyển cửa sổ bằng lệnh sau:

wmctrl -r <WindowName> -t <WorkspaceNumber>

Lưu ý rằng số không gian làm việc bắt đầu từ 0. Lần cuối bạn có thể di chuyển đến không gian làm việc ưa thích của mình bằng lệnh:

wmctrl -s <WorkspaceNumber>

1

Tôi sử dụng cấu trúc cơ bản này trong các tập lệnh để mở một bộ ứng dụng cụ thể trong các không gian làm việc cụ thể .. ví dụ này mở thiết bị đầu cuối của tôi và di chuyển nó đến không gian làm việc 1 ...

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

Một lời giải thích nhỏ về mã này sẽ được hoan nghênh. Tại sao nó bắt đầu với cd? bạn đang mong đợi điều gì cho đến khi? là "tôi @ myspc ~" tên cửa sổ ??
wranvaud

0

Cài đặt wmctrl

sudo apt install wmctrl

Và tạo một tập lệnh (trong ví dụ này thunderbird trên không gian làm việc thứ hai ( -t 1)):

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

Để biết tên ứng dụng của bạn trên wmctrl, bạn có thể xem nó bằng cách nhấn vào thiết bị đầu cuối của bạn:

wmctrl -l

Và thay thế nó bằng tên chính xác trong kịch bản.

Hãy cẩn thận với chữ in hoa ("Thunderbird" chứ không phải "thunderbird") !!

Ví dụ khác với firefox trên không gian làm việc 3d ( -t 2):

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

Làm việc trên Debain 10 với Cinnamon. Nhưng nên làm việc cho tất cả


-1

Tôi khá chắc chắn là không thể làm được. Lý do là các môi trường cửa sổ như Gnome mong muốn phần mềm xử lý việc này và các nhà sản xuất phần mềm mong đợi các môi trường cửa sổ sẽ xử lý việc này.

Devilspie là một ý tưởng tốt, nhưng nó phù hợp với mô hình (ví dụ: if name == 'google-chrome'). Vậy chuyện gì xảy ra nếu tôi mở hai trình duyệt? Cả hai được chuyển đến cùng một không gian làm việc? Tôi có 6x3 = 18 không gian làm việc, mỗi không gian có một phiên bản chrome cụ thể. Sẽ rất hữu ích nếu tôi có thể đổi tên các chương trình này (ví dụ: 'google-chrome1', 'google-chrome2' ...) nhưng tôi không thể tìm ra cách để làm điều đó. Vì vậy, chúng ta phải sử dụng wmctrl.

wmctrl là một b / c tốt hơn một chút ngoài việc sử dụng tiêu đề cửa sổ, bạn cũng có thể sử dụng ID cửa sổ hoặc chỉ sử dụng cửa sổ hiện được tô sáng. ID cửa sổ là một nỗi đau để có được b / c chúng không được tạo ngay lập tức. Xem bên dưới

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

nhưng sau đó điều khiển không được trả về dòng lệnh cho đến khi SAU thoát khỏi gedit. Tất cả chúng ta phải làm để có được điều này là đặt một &dấu hiệu

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

nhưng bây giờ kiểm soát là 99,999% thời gian, được trả về dòng lệnh TRƯỚC KHI các trình quản lý cửa sổ khởi chạy cửa sổ và không có cách nào để tìm id cửa sổ. Người ta phải thiết lập một kỹ thuật lặp rất phức tạp để kiểm tra xem có cửa sổ mới nào được tạo không, và để đoán xem đó có phải là cửa sổ mà chúng ta đang tìm kiếm không.

Kiểm tra cửa sổ hoạt động thông qua cờ :ACTIVE:có cùng một vấn đề, nó không chờ chương trình chạy xong.

wmctrlđình công tôi là một chương trình rất kỳ lạ. Có vẻ như nó được thiết kế cho những người không có chuột hoặc không thể kéo chương trình của họ qua các không gian làm việc.


OP cho biết trình duyệt đi vào không gian làm việc bốn. Nếu cần có thể mở trình duyệt trên các không gian làm việc khác sau khi tập lệnh khởi động phiên chạy, lệnh cuối cùng trong tập lệnh đó có thể là chế độ ngủ; ác quỷ pkill.
Mikel
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.