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

В настоящее время я запускаю Linux Mint 17 с ядром 3.14.5-031405-lowlatency. Я установил это ядро ​​для устранения проблем с медленными беспроводными устройствами.

Я начал замечать эту же проблему всего несколько дней назад.

Исправление для меня состояло в том, чтобы полностью удалить все старые ядра (запасы, которые поставлялись с Mint 17). Затем я выполнил dist-upgrade, перезагрузился и больше не получаю сообщение.

Я не являюсь гуру linux, поэтому не могу объяснить, почему это сработало, просто натолкнулся.

10
задан 7 April 2017 в 09:33

16 ответов

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

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

Надеюсь, это поможет!

13
ответ дан 22 May 2018 в 23:55
  • 1
    Если OP использует Unity, есть только одно рабочее пространство :), также на выходе wmctrl -d – Jacob Vlijm 7 April 2017 в 00:53
  • 2
    @JacobVlijm Тогда OP, вероятно, не беспокоился об этом, если бы было только одно рабочее пространство. :) – Terrance 7 April 2017 в 00:57
  • 3
    Конечно, он будет, но тогда они называются видовыми экранами, а не напрямую извлекаемыми из wmctrl -d. – Jacob Vlijm 7 April 2017 в 01:00
  • 4
    @JacobVlijm Ну, один яркий свет - это то, что Unity больше не будет дефолтом и уйдет после выхода 18.04. : D – Terrance 7 April 2017 в 01:20
  • 5
    Мне это действительно нравится, и это, вероятно, будет разветвлено. – Jacob Vlijm 7 April 2017 в 01:22

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

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

Надеюсь, это поможет!

13
ответ дан 18 July 2018 в 15:25

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

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

Надеюсь, это поможет!

13
ответ дан 24 July 2018 в 20:38

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

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

Надеюсь, это поможет!

13
ответ дан 31 July 2018 в 10:49

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

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

Надеюсь, это поможет!

13
ответ дан 31 July 2018 в 23:39

Видовые экраны в Unity

Если вы используете Unity, текущий видовой экран не может быть получен непосредственно из

wmctrl -d

, поскольку Unity имеет видовые экраны, которые не обнаруживаются непосредственно с помощью wmctrl -d. На выходе будет отображаться только одно рабочее пространство:

0  * DG: 5040x2100  VP: 1680,1050  WA: 59,24 1621x1026  N/A
, где мое разрешение 1680 x 1050 (из xrandr) spanning workspace (все видовые экраны) - 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())

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

Установить wmctrl
sudo apt install wmctrl
Запустить его командой
python3 /path/to/get_viewport.py
Он выведет 1, 2, 3 или любой другой viewport is. Он автоматически подсчитывает строки / столбцы, которые может включать конфигурация вашего видового экрана.

Пояснение

Сценарий

, где мое разрешение 1680 x 1050 (от xrandr) [!d5 ] получает текущую позицию в охватывающей рабочей области , охватывающей рабочей области (все видовые экраны) является 5040x2100. Это 3x2 видовые экраны: 5040/1680 = 3 и 2100/1050 = 2. из этого, он вычисляет текущее окно просмотра
9
ответ дан 22 May 2018 в 23:55
  • 1
    Независимо от того, как я отношусь к Unity, этот скрипт работает очень хорошо! Красиво сделано! +1 – Terrance 7 April 2017 в 01:51
  • 2
    Хаха спасибо :) – Jacob Vlijm 7 April 2017 в 08:17

По крайней мере, в оболочке 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

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

3
ответ дан 22 May 2018 в 23:55
  • 1
    Это номер рабочей области, а не имя. Чтобы получить имя, вам нужно найти номер в свойстве _NET_DESKTOP_NAMES. – Gilles 7 April 2017 в 23:28

Видовые экраны в Unity

Если вы используете Unity, текущий видовой экран не может быть получен непосредственно из

wmctrl -d

, поскольку Unity имеет видовые экраны, которые не обнаруживаются непосредственно с помощью wmctrl -d. На выходе будет отображаться только одно рабочее пространство:

0 * DG: 5040x2100 VP: 1680,1050 WA: 59,24 1621x1026 N/A , где мое разрешение 1680 x 1050 (из xrandr) spanning workspace (все видовые экраны) - 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())

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

Установить wmctrl sudo apt install wmctrl Запустить его командой python3 /path/to/get_viewport.py Он выведет 1, 2, 3 или любой другой viewport is. Он автоматически подсчитывает строки / столбцы, которые может включать конфигурация вашего видового экрана.

Пояснение

Сценарий

, где мое разрешение 1680 x 1050 (от xrandr) получает текущую позицию в охватывающей рабочей области , охватывающей рабочей области (все видовые экраны) является 5040x2100. Это 3x2 видовые экраны: 5040/1680 = 3 и 2100/1050 = 2. из этого, он вычисляет текущее окно просмотра
9
ответ дан 18 July 2018 в 15:25

По крайней мере, в оболочке 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

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

3
ответ дан 18 July 2018 в 15:25

Видовые экраны в Unity

Если вы используете Unity, текущий видовой экран не может быть получен непосредственно из

wmctrl -d

, поскольку Unity имеет видовые экраны, которые не обнаруживаются непосредственно с помощью wmctrl -d. На выходе будет отображаться только одно рабочее пространство:

0 * DG: 5040x2100 VP: 1680,1050 WA: 59,24 1621x1026 N/A , где мое разрешение 1680 x 1050 (из xrandr) spanning workspace (все видовые экраны) - 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())

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

Установить wmctrl sudo apt install wmctrl Запустить его командой python3 /path/to/get_viewport.py Он выведет 1, 2, 3 или любой другой viewport is. Он автоматически подсчитывает строки / столбцы, которые может включать конфигурация вашего видового экрана.

Пояснение

Сценарий

, где мое разрешение 1680 x 1050 (от xrandr) получает текущую позицию в охватывающей рабочей области , охватывающей рабочей области (все видовые экраны) является 5040x2100. Это 3x2 видовые экраны: 5040/1680 = 3 и 2100/1050 = 2. из этого, он вычисляет текущее окно просмотра
9
ответ дан 24 July 2018 в 20:38
  • 1
    Независимо от того, как я отношусь к Unity, этот скрипт работает очень хорошо! Красиво сделано! +1 – Terrance 7 April 2017 в 01:51
  • 2
    Хаха спасибо :) – Jacob Vlijm 7 April 2017 в 08:17

По крайней мере, в оболочке 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

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

3
ответ дан 24 July 2018 в 20:38
  • 1
    Это номер рабочей области, а не имя. Чтобы получить имя, вам нужно найти номер в свойстве _NET_DESKTOP_NAMES. – Gilles 7 April 2017 в 23:28

Видовые экраны в Unity

Если вы используете Unity, текущий видовой экран не может быть получен непосредственно из

wmctrl -d

, поскольку Unity имеет видовые экраны, которые не обнаруживаются непосредственно с помощью wmctrl -d. На выходе будет отображаться только одно рабочее пространство:

0 * DG: 5040x2100 VP: 1680,1050 WA: 59,24 1621x1026 N/A , где мое разрешение 1680 x 1050 (из xrandr) spanning workspace (все видовые экраны) - 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())

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

Установить wmctrl sudo apt install wmctrl Запустить его командой python3 /path/to/get_viewport.py Он выведет 1, 2, 3 или любой другой viewport is. Он автоматически подсчитывает строки / столбцы, которые может включать конфигурация вашего видового экрана.

Пояснение

Сценарий

, где мое разрешение 1680 x 1050 (от xrandr) получает текущую позицию в охватывающей рабочей области , охватывающей рабочей области (все видовые экраны) является 5040x2100. Это 3x2 видовые экраны: 5040/1680 = 3 и 2100/1050 = 2. из этого, он вычисляет текущее окно просмотра
9
ответ дан 31 July 2018 в 10:49
  • 1
    Независимо от того, как я отношусь к Unity, этот скрипт работает очень хорошо! Красиво сделано! +1 – Terrance 7 April 2017 в 01:51
  • 2
    Хаха спасибо :) – Jacob Vlijm 7 April 2017 в 08:17

По крайней мере, в оболочке 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

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

3
ответ дан 31 July 2018 в 10:49
  • 1
    Это номер рабочей области, а не имя. Чтобы получить имя, вам нужно найти номер в свойстве _NET_DESKTOP_NAMES. – Gilles 7 April 2017 в 23:28

Видовые экраны в Unity

Если вы используете Unity, текущий видовой экран не может быть получен непосредственно из

wmctrl -d

, поскольку Unity имеет видовые экраны, которые не обнаруживаются непосредственно с помощью wmctrl -d. На выходе будет отображаться только одно рабочее пространство:

0 * DG: 5040x2100 VP: 1680,1050 WA: 59,24 1621x1026 N/A , где мое разрешение 1680 x 1050 (из xrandr) spanning workspace (все видовые экраны) - 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())

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

Установить wmctrl sudo apt install wmctrl Запустить его командой python3 /path/to/get_viewport.py Он выведет 1, 2, 3 или любой другой viewport is. Он автоматически подсчитывает строки / столбцы, которые может включать конфигурация вашего видового экрана.

Пояснение

Сценарий

, где мое разрешение 1680 x 1050 (от xrandr) получает текущую позицию в охватывающей рабочей области , охватывающей рабочей области (все видовые экраны) является 5040x2100. Это 3x2 видовые экраны: 5040/1680 = 3 и 2100/1050 = 2. из этого, он вычисляет текущее окно просмотра
9
ответ дан 31 July 2018 в 23:39
  • 1
    Независимо от того, как я отношусь к Unity, этот скрипт работает очень хорошо! Красиво сделано! +1 – Terrance 7 April 2017 в 01:51
  • 2
    Хаха спасибо :) – Jacob Vlijm 7 April 2017 в 08:17

По крайней мере, в оболочке 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

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

3
ответ дан 31 July 2018 в 23:39
  • 1
    Это номер рабочей области, а не имя. Чтобы получить имя, вам нужно найти номер в свойстве _NET_DESKTOP_NAMES. – Gilles 7 April 2017 в 23:28

По крайней мере, в оболочке 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

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

3
ответ дан 6 August 2018 в 22:41

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

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