如何“智能”定位和调整Linux终端窗口的大小?

如何“智能”定位和调整Linux终端窗口的大小?

我想集思广益,想出一个可以在多个桌面 UI 和多个 Linux 终端(如果可能)上运行的脚本,该脚本可以“智能地”定位终端窗口。静态设置大小和位置的问题很明显 - 不同的屏幕分辨率。

用户案例 1:Ann 喜欢使用多个终端窗口,并且她希望一个终端窗口使用屏幕的上半部分,另一个终端窗口使用屏幕的下半部分,但每个终端窗口的宽度应为屏幕分辨率的 80%。

用户案例 2:Bill 只使用一个终端,但他喜欢将其放在右下角,并具有全屏分辨率的 40% 宽度和 30% 高度。

答案1

你应该能够做一些事情wmctrl

wmctrl 是一个 UNIX/Linux 命令行工具,用于与 EWMH/NetWM 兼容的 X Window Manager 进行交互。

该工具提供对 EWMH 规范中定义的几乎所有功能的命令行访问。例如,它可用于获取有关窗口管理器的信息、获取桌面和管理窗口的详细列表、切换和调整桌面大小、使窗口全屏、始终位于上方或粘滞,以及激活、关闭、移动、调整大小、最大化和最小化它们。

只需为 Ann 和 Bill 编写类似这样的脚本:

#!/bin/bash
xterm &
sleep 2  ## sleep just to let the terminas appear and become the active window
wmctrl -r :ACTIVE: -e 5,-1,-1,660,540
        -----------   -- -- -- --- ---
             |         | |  |   |   |---> Window height
             |         | |  |   |-------> Window width             
             |         | |  |-----------> Window Y coordinates
             |         | |--------------> Window X coordinates
             |         |----------------> Gravity
             |--------------------------> Apply to the active window

引力可以是(来源):

  • 西北 (1)
  • 北 (2),
  • 东北地区 (3)、
  • 西 (4),
  • 中锋(5)
  • 东 (6),
  • 西南航空 (7)、
  • 南 (8),
  • 东南 (9)
  • 静态(10)。

重力为 0 表示窗口管理器应使用 中指定的重力WM_SIZE_HINTS.win_gravity

如果您查看,您应该能够找到一种具体指定终端窗口的方法man wmctrl。否则,请使用我的sleep&& activehack。


更新以回应您的评论:

我可以用这个让活动窗口移动到屏幕的右下角:

wmctrl -r :ACTIVE: -e 4,3040,900,620,620

我不太清楚重力在做什么,但指定 X 和 Y 是可行的。我正在运行一个扩展桌面分布在两个屏幕上的系统:

$ xrandr  | grep -w connected
VGA-0 connected 1440x900+1600+0 (normal left inverted right x axis y axis) 408mm x 255mm
DP-3 connected 1600x900+0+0 (normal left inverted right x axis y axis) 344mm x 194mm

所以,1600+1440 = 3040这意味着3040我的窗口将位于右下角。当然,您需要根据您的设置进行调整。

相关内容