如何在AwesomeWM中通过命令行指定标签启动程序?
如何通过命令行在指定虚拟桌面启动程序
当然可行,不同操作系统的实现方式有所区别,下面分平台说明具体操作:
Windows 系统
方法1:借助第三方工具 nircmd
这是最简便的方式,先下载nircmd并放到系统PATH路径下,然后执行:
start notepad.exe && timeout /t 1 && nircmd.exe win move desktop 2 "notepad.exe"
2是目标虚拟桌面的编号(从1开始计数)timeout /t 1是给程序启动留缓冲时间,避免窗口还没创建就执行移动命令
方法2:用 PowerShell 原生实现
无需第三方工具,直接编写PowerShell脚本执行:
# 启动目标程序 $proc = Start-Process notepad -PassThru # 等待窗口加载完成 Start-Sleep -Seconds 1 # 获取程序窗口句柄 $hwnd = $proc.MainWindowHandle # 导入Windows API函数 Add-Type @" using System; using System.Runtime.InteropServices; public class DesktopHelper { [DllImport("user32.dll")] public static extern bool SetWindowDesktopWindow(IntPtr hWnd, IntPtr hDesktop); [DllImport("user32.dll")] public static extern IntPtr GetDesktopWindow(); [DllImport("user32.dll")] public static extern IntPtr GetWindow(IntPtr hWnd, uint uCmd); public const uint GW_HWNDNEXT = 2; } "@ # 获取第2个虚拟桌面的句柄(循环次数对应桌面编号,这里2对应第2个桌面) $targetDesktop = [DesktopHelper]::GetDesktopWindow() for ($i=1; $i -lt 2; $i++) { $targetDesktop = [DesktopHelper]::GetWindow($targetDesktop, [DesktopHelper]::GW_HWNDNEXT) } # 将窗口移动到目标虚拟桌面 [DesktopHelper]::SetWindowDesktopWindow($hwnd, $targetDesktop)
Linux 系统
Linux不同桌面环境的命令工具差异较大,以下是常见桌面的操作方式:
GNOME 桌面
借助wmctrl工具(先通过apt install wmctrl安装):
gedit & sleep 1 && wmctrl -r gedit -t 1
1是目标工作区的编号(从0开始计数)sleep 1用于等待程序窗口创建完成
KDE 桌面
结合xdotool和qdbus(先安装xdotool):
kwrite & sleep 1 && qdbus org.kde.KWin /KWin moveWindowToDesktop $(xdotool search --name kwrite) 2
2是目标工作区的编号(从1开始计数)
Xfce 桌面
同样用wmctrl工具:
xfce4-terminal & sleep 1 && wmctrl -r "Terminal" -t 0
0是目标工作区的编号(从0开始计数)
内容的提问来源于stack exchange,提问作者mbork
相关产品推荐
相关产品推荐

