Как я ищу название текущей рабочей области?

Есть ли какой-либо путь к сценарию удара для поиска названия текущей рабочей области (виртуальный рабочий стол)?

Это кажется действительно полезным для вещей как настройка поведений в моем .bashrc файле на основе рабочего стола, в котором была создана оболочка.

10
задан 6 April 2017 в 23:33

3 ответа

Можно сделать это с wmctrl -d для списка всех рабочих областей. Эти * представляет текущую рабочую область:

~$ 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

Так, для получения только тока, grep для *:

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

Hope это помогает!

13
ответ дан 23 November 2019 в 04:18

По крайней мере, в оболочке Gnome, но вероятно в другом WM также, можно спросить Xserver непосредственно (если в Уэйленде, никакой идее).

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

В основном, команда xprop возвратится

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

, и затем можно массажировать немного информацию для получения то, в чем Вы нуждаетесь.

3
ответ дан 23 November 2019 в 04:18

Области просмотра в единице

При использовании Единицы текущая область просмотра не может быть получена непосредственно от

wmctrl -d

так как Единица имеет области просмотра, которые не обнаруживаются непосредственно wmctrl -d. Вывод покажет только одну рабочую область:

0  * DG: 5040x2100  VP: 1680,1050  WA: 59,24 1621x1026  N/A
  • где мое разрешение составляет 1680 x 1050 (от xrandr)
  • рабочая область охвата (все области просмотра) 5040x2100. Это 3x2 области просмотра: 5040/1680 = 3 и 2100 / 1050 = 2.
  • Я в настоящее время включен (область просмотра-) положение 1680,1050 (x, 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())

Использовать:

  1. Установка wmctrl

    sudo apt install wmctrl
    
  2. Выполните его командой

    python3 /path/to/get_viewport.py
    

    Это произведет 1, 2, 3, или независимо от того, что текущая область просмотра. Это автоматически считает строки/столбцы, которые может включать Ваша конфигурация области просмотра.

Объяснение

enter image description here

Сценарий

  • получает размер одной области просмотра (разрешение) от xrandr, включая возможные дополнительные мониторы.
  • получает текущую позицию на рабочей области охвата
  • galculates число столбцов,/rows в Вашей установке области просмотра
  • от этого это вычисляет текущую область просмотра
10
ответ дан 23 November 2019 в 04:18

Другие вопросы по тегам:

Похожие вопросы: