Як шукати назву поточної робочої області?


11

Чи є спосіб для bash-скрипту шукати ім'я поточної робочої області (віртуального робочого столу)?

Це здається дійсно корисним для таких речей, як налаштування поведінки у моєму файлі .bashrc на основі робочого столу, на якому створена оболонка.


Який ваш менеджер вікон?
Яків Влійм

Я використовую робочий стіл Cinnamon, встановлений на Ubuntu. Я думав, що сказав, але коли я відредагував це питання, я, мабуть, занадто сильно витяг.
DonGar

1
Під Cinnamon це дає останнє слово у назві робочого столу. Це досить добре для мого випадку використання. desktop =wmctrl -d | grep '*' | sed 's/.* //g'
DonGar

Відповіді:


13

Ви можете це зробити, 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

Сподіваюся, це допомагає!


Якщо ОП використовує Unity, є лише одна робоча область :), також на виходіwmctrl -d
Jacob Vlijm

@JacobVlijm Тоді ОП, мабуть, не турбуватиметься про це, якби була лише одна робоча область. :)
Терранс

Звичайно, він буде, але тоді вони називаються вікнами перегляду, і їх не можна отримати безпосередньо wmctrl -d.
Яків Влійм

@JacobVlijm Ну, одне сяюче світло полягає в тому, що Unity вже не буде дефолтом і піде після виходу 18.04. : D
Терранс

Мені це справді подобається, і це, мабуть, буде роздвоєним.
Яків Влійм

11

Огляди в Unity

Якщо ви використовуєте Unity , поточний огляд перегляду неможливо отримати безпосередньо з

wmctrl -d

оскільки у Unity є вікна перегляду, які не виявляються безпосередньо wmctrl -d. Результат покаже лише одну робочу область:

0  * DG: 5040x2100  VP: 1680,1050  WA: 59,24 1621x1026  N/A
  • де моя роздільна здатність - 1680 х 1050 (від xrandr)
  • охоплює робочу область (усі вікна перегляду) 5040x2100. Тобто 3x2 види перегляду: 5040/1680 = 3 та 2100/1050 = 2.
  • Зараз я перебуваю на (viewport-) позиції 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 або будь-який поточний огляд. Він автоматично підраховує рядки / стовпці, які може включати конфігурація вікна перегляду.

Пояснення

введіть тут опис зображення

Сценарій

  • отримує розмір одного огляду (роздільної здатності) від xrandr, включаючи можливі додаткові монітори.
  • отримує поточне положення на робочому просторі, що охоплює
  • позначає кількість стовпців / рядків у налаштуваннях вашого огляду
  • з цього обчислює поточний вікно перегляду

1
Незалежно від того, як я відчуваю Unity, цей сценарій працює дуже добре! Чудово зроблено! +1
Терранс

3

Принаймні в оболонці Gnome, але, ймовірно, і в іншій WM, ви можете запитати Xserver безпосередньо (якщо в Wayland, ідеї немає).

[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

а потім ви можете помасажувати інформацію, щоб отримати те, що вам потрібно.


Це номер робочої області, а не ім’я. Щоб отримати ім’я, потрібно знайти номер у власність _NET_DESKTOP_NAMES.
Жил "ТАК - перестань бути злим"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.