Как использовать wmctrl для закрепления приложения во всех рабочих областях

У меня есть скрипт, вызываемый при входе в систему, для перемещения определенных приложений в соответствующие рабочие области.

Я хочу закрепить одно приложение во всех рабочих областях. Согласно справочной странице wmctrl ,

Номера рабочих столов начинаются с 0. Используйте -1, чтобы закрепить все рабочие столы.

Однако команда

      wmctrl -i -r 0x03800003 -t -1

не имеет никакого эффекта. Использование положительных целых чисел правильно закрепляет приложения.

(Я получил идентификатор окна с помощью wmctrl -l)

Что я делаю не так?

2 ответа

      wmctrl -i -r <window-id> -t -2

у меня сработало (спасибо @harrymc), особенно с браузером Opera. Это была часть скрипта Python, вызываемого при запуске.

      import os
import subprocess
import time

time.sleep(30)

processes = {
    'Opera': -2,
    'Spotify': 1,
    'System Monitor': 3,
}
# Move processes to workspace
process_bytes = subprocess.check_output(['wmctrl', '-l'])
process_string = process_bytes.decode('utf-8')
window_data = process_string.split('\n')
for line in window_data:
    row = line.split(' ')
    window_id = row[0]
    description = ' '.join(row[4:])
    for process, workspace in processes.items():
        if process in description:
            # workspace is 0 based
            os.system(f'wmctrl -i -r {window_id} -t {workspace}')
            break

Спасибо, у меня сработало «wmctrl -i -r 0x03800003 -t -1» с соответствующим идентификатором.

В моем случае...

  1. запустить желаемое окно из командной строки в качестве фонового процесса

feh -x -g 624x168-0+0 --scale-down UA-keyboard.png &2. получить идентификатор с помощью wmctrl wmctrl -l | awk '$4 ~ /feh/ {print $1}'0x026000013. оберните его в однострочный текст, чтобы wmctrl переключился на все рабочие области wmctrl -i -r $(wmctrl -l | awk '$4 ~ /feh/ {print $1}' ) -т -1

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