如何使用 wmctrl 将应用程序固定到所有工作区

如何使用 wmctrl 将应用程序固定到所有工作区

我有一个名为“登录时调用”的脚本,用于将特定应用程序移动到各自的工作区

我想将一个应用程序固定到所有工作区。根据控制端手册页

桌面编号从 0 开始。使用 -1 固定到所有桌面。

但是命令

wmctrl -i -r 0x03800003 -t -1

没有效果。使用正整数可以正确固定应用程序。

(我已经使用以下方法获取了窗口 IDwmctrl-l

我究竟做错了什么?

答案1

谢谢,“wmctrl -i -r 0x03800003 -t -1”对我有用,并且具有适当的 Id。

就我而言...

  1. 从命令行启动我想要的窗口作为后台进程

feh -x -g 624x168-0+0 --scale-down UA-keyboard.png & 2. 使用 wmctrl 获取 id wmctrl -l | awk '$4 ~ /feh/ {print $1}' 0x02600001 3. 将其包装成一行,以便 wmctrl 更改为所有工作区 wmctrl -i -r $(wmctrl -l | awk '$4 ~ /feh/ {print $1}') -t -1

答案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

相关内容