Làm cách nào để tìm tên của không gian làm việc hiện tại?


11

Có cách nào để một tập lệnh bash tìm kiếm tên của không gian làm việc hiện tại (máy tính để bàn ảo) không?

Điều này có vẻ thực sự hữu ích cho những thứ như tùy chỉnh các hành vi trong tệp .bashrc của tôi dựa trên máy tính để bàn trong đó trình bao được tạo.


Người quản lý cửa sổ của bạn là gì?
Jacob Vlijm

Tôi đang sử dụng máy tính để bàn Cinnamon được cài đặt trên Ubuntu. Tôi nghĩ tôi đã nói, nhưng khi tôi chỉnh sửa câu hỏi, tôi đã phải rút ra quá nhiều.
DonGar

1
Trong Cinnamon, điều này cho từ cuối cùng trong tên máy tính để bàn. Đó là đủ tốt cho trường hợp sử dụng của tôi. máy tính để bàn =wmctrl -d | grep '*' | sed 's/.* //g'
DonGar

Câu trả lời:


13

Bạn có thể làm điều đó với wmctrl -ddanh sách tất cả các không gian làm việc. Các *đại diện cho không gian làm việc hiện tại:

~$ wmctrl -d
0  * DG: 3840x1080  VP: 0,0  WA: 0,25 3840x1055  1
1  - DG: 3840x1080  VP: N/A  WA: 0,25 3840x1055  2
2  - DG: 3840x1080  VP: N/A  WA: 0,25 3840x1055  3
3  - DG: 3840x1080  VP: N/A  WA: 0,25 3840x1055  4

Vì vậy, để chỉ nhận hiện tại, grep cho *:

~$ wmctrl -d | grep -w '*'
0  * DG: 3840x1080  VP: 0,0  WA: 0,25 3840x1055  1

Hi vọng điêu nay co ich!


Nếu OP sử dụng Unity, chỉ có một không gian làm việc :), cũng ở đầu ra củawmctrl -d
Jacob Vlijm

@JacobVlijm Sau đó, OP có lẽ sẽ không lo lắng về điều này nếu chỉ có một không gian làm việc. :)
Terrance

Tất nhiên anh ta sẽ, nhưng sau đó chúng được gọi là khung nhìn, và không thể truy xuất trực tiếp từ đó wmctrl -d.
Jacob Vlijm

@JacobVlijm Chà, một điều sáng chói là Unity sẽ không còn là mặc định và biến mất sau khi phát hành 18.04. : D
Terrance

Tôi thực sự thích nó, và nó có thể sẽ được rẽ nhánh.
Jacob Vlijm

11

Lượt xem trong Unity

Nếu bạn đang sử dụng Unity , chế độ xem hiện tại không thể được truy xuất trực tiếp từ

wmctrl -d

kể từ khi Unity có chế độ xem, không được phát hiện trực tiếp bởi wmctrl -d. Đầu ra sẽ chỉ hiển thị một không gian làm việc:

0  * DG: 5040x2100  VP: 1680,1050  WA: 59,24 1621x1026  N/A
  • nơi có độ phân giải của tôi là 1680 x 1050 (từ xrandr)
  • không gian làm việc kéo dài (tất cả các khung nhìn) là 5040x2100. Đó là số lượt xem 3x2: 5040/1680 = 3 và 2100/1050 = 2.
  • Tôi hiện đang ở vị trí 1680,1050( viewport-) (x, y)

Kịch bản bên dưới tính toán chế độ xem hiện tại từ thông tin này:

#!/usr/bin/env python3
import subprocess

def get_res():
    # get resolution
    xr = subprocess.check_output(["xrandr"]).decode("utf-8").split()
    pos = xr.index("current")
    return [int(xr[pos+1]), int(xr[pos+3].replace(",", "") )]

def current():
    # get the resolution (viewport size)
    res = get_res()
    # read wmctrl -d
    vp_data = subprocess.check_output(
        ["wmctrl", "-d"]
        ).decode("utf-8").split()
    # get the size of the spanning workspace (all viewports)
    dt = [int(n) for n in vp_data[3].split("x")]
    # calculate the number of columns
    cols = int(dt[0]/res[0])
    # calculate the number of rows
    rows = int(dt[1]/res[1])
    # get the current position in the spanning workspace
    curr_vpdata = [int(n) for n in vp_data[5].split(",")]
    # current column (readable format)
    curr_col = int(curr_vpdata[0]/res[0])
    # current row (readable format)
    curr_row = int(curr_vpdata[1]/res[1])
    # calculate the current viewport
    return curr_col+curr_row*cols+1

print(current())

Để sử dụng:

  1. Tải về wmctrl

    sudo apt install wmctrl
    
  2. Chạy nó bằng lệnh

    python3 /path/to/get_viewport.py
    

    Nó sẽ xuất ra 1, 2, 3 hoặc bất cứ chế độ xem hiện tại nào. Nó tự động đếm hàng / cột cấu hình khung nhìn của bạn có thể bao gồm.

Giải trình

nhập mô tả hình ảnh ở đây

Kịch bản

  • có kích thước của một khung nhìn (độ phân giải) từ xrandr, bao gồm cả màn hình phụ có thể.
  • có được vị trí hiện tại trên không gian làm việc kéo dài
  • tăng số lượng cột / hàng trong thiết lập chế độ xem của bạn
  • từ đó, nó tính toán khung nhìn hiện tại

1
Bất kể tôi cảm thấy thế nào về Unity, kịch bản này hoạt động rất tốt! Làm tốt lắm! +1
Terrance

3

Ít nhất là trong vỏ Gnome, nhưng có lẽ trong WM khác, bạn có thể hỏi trực tiếp Xserver (nếu ở Wayland, không có ý tưởng nào).

[romano:~/tmp] % desktop=$(xprop -root -notype  _NET_CURRENT_DESKTOP | perl -pe 's/.*?= (\d+)/$1/') 
[romano:~/tmp] % echo $desktop
1

Về cơ bản, lệnh xpropsẽ trở lại

 [romano:~/tmp] % xprop -root -notype  _NET_CURRENT_DESKTOP
 _NET_CURRENT_DESKTOP = 1

và sau đó bạn có thể xoa bóp một chút thông tin để có được những gì bạn cần.


Đó là số không gian làm việc, không phải tên. Để có được tên, bạn phải tìm số trong tài sản _NET_DESKTOP_NAMES.
Gilles 'SO- ngừng trở nên xấu xa'
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.