Ubuntu 终端默认位置

Ubuntu 终端默认位置

你们很多人都知道,每当你在 Ubuntu 上打开一个新的终端窗口时,它都会位于屏幕的左上角。下一个窗口位于它的正下方。第三个窗口位于右上角,第四个窗口位于屏幕的右下角。我想将这个功能添加到我现在使用的另一个 Linux 发行版中。我只是想知道在 Ubuntu 中如何处理这个问题。

此外,这不仅适用于 gnome-terminal。它适用于迄今为止我下载的任何终端仿真器。因此,我强烈认为这不是终端仿真器特有的问题。有人知道如何处理吗?

答案1

推荐

我建议您了解您将要迁移到的工具。几乎所有终端都具有某种配置文件,例如 alacritty。话虽如此,以下是我在此过程中偶然发现的一些“技巧”。

我如何做到

当您启动终端时,有一个选项可让您设置它的大小以及 X 和 Y 偏移量。

选择是--geometry,而且是在许多(大多数?)上可用Linux 终端模拟器。Gnome 终端也不例外。至于总是解决方案,一些开发人员只是不愿意花时间去构建额外的程序员/超级用户自动化挂钩。

在我们的终端中使用几何选项的语法如下:

$ gnome-terminal --geometry WxH+X+Y

请注意,在参数字符串中,除大写字母外的所有内容都应按字面意思解释。大写字母表示以列为单位width的测量值、Height以行为单位的测量值以及X & Y相对于屏幕位置 (0,0) 的偏移量。

我曾经写过一个命令将其保存到 $HOME,然后保存到~/.bashrc,这样它就可以持久保存。我相信这是我很久以前从同一个网站得到的想法,但现在当我需要编写脚本来实现功能时,我会使用自己设计的方法。

补充一下:如果我在 Ubuntu 中更改自己,我只需创建(或更改为)另一个终端概况。您在终端 GUI“首选项”设置中创建的每个新 l 配置文件都允许您指定终端的背景颜色、透明度等,以及前面提到的设置。

我还将打开 vim 并将上述命令打印到一行。接下来,我将根据需要将其垂直复制多次,并将每次复制配置为方便的大小/位置。

最后,我打开一个分割并将~/.bash-aliases其加载到它的缓冲区,并为该命令的每个实例设置一个别名。

然后我只需放一个 3-4 个字母的名字,就像midl每次我需要在屏幕中间启动一个 guit 终端新进程一样。

答案2

谢谢 Nate。我使用了你给我的想法,并想出了解决我问题的脚本。这是一个专门为我的分辨率 1920x1080 设计的 Python 脚本。它还依赖于一个名为 wmctrl 的工具。以下是脚本:

#!/usr/bin/python3

import os


def eliminate(iter):
    res = []
    for i in iter:
        if i:
            res.append(i)
    return res


workspace = "wmctrl -d | grep '*' | cut -d ' ' -f1 > /tmp/curr_ws"

os.system(workspace)
out_workspace = ""
with open("/tmp/curr_ws","r") as f:
    out_workspace =  f.read()
out_workspace = int(out_workspace)
print("DEBUG: Current workspace:", out_workspace)

positions = 'wmctrl -lG | grep "kali:" | grep "^........... {0}" | tr -s " " | cut -d " " -f 3,4 > /tmp/positions'.format(out_workspace)
sizes = 'wmctrl -lG | grep "kali:" | grep "^........... {0}" | tr -s " " | cut -d " " -f 5,6 > /tmp/sizes'.format(out_workspace)

os.system(positions)
out_positions = ""
with open("/tmp/positions","r") as f:
    out_positions =  f.read()
out_positions = eliminate(out_positions.split("\n"))

os.system(sizes)
out_sizes = ""
with open("/tmp/sizes","r") as f:
    out_sizes = f.read()
out_sizes = eliminate(out_sizes.split("\n"))

terminal_positions = [[110, 101, 854, 479], [973, 101, 854, 479], [110, 611, 854, 479], [973, 611, 854, 479]]
terminal_strings = ["gnome-terminal --geometry 105x25+100+45", "gnome-terminal --geometry 105x25+963+45",
                    "gnome-terminal --geometry 105x25+100+555", "gnome-terminal --geometry 105x25+963+555"]

parsed_positions = []
for i in range(0,len(out_positions)):
    parsed_positions.append([ int(out_positions[i].split(" ")[0]),int(out_positions[i].split(" ")[1]),int(out_sizes[i].split(" ")[0]),int(out_sizes[i].split(" ")[1]) ])
print("DEBUG: Positions:", parsed_positions)

def check(term_pos, parsed_pos):
    index = 0
    overlap = False
    for i in terminal_positions:
        overlap = False
        for j in parsed_positions:
            ax0 = term_left_start = i[0]
            ay0 = term_up_start = i[1]
            ax1 = term_left_end = i[0] + i[2]
            ay1 = term_up_end = i[1] + i[3]
            
            bx0 = pars_left_start = j[0]
            by0 = pars_up_start = j[1]
            bx1 = pars_left_end = j[0] + j[2]
            by1 = pars_up_end = j[1] + j[3]

            # if term_left_start >= pars_left_end or term_left_end <= pars_left_start or term_up_end <= pars_up_start or term_up_start >= pars_up_end:
            #     overlap = True

            if ((bx0 <= ax0) and (ax1 <= bx1)) or ((ax0 <= bx0 <= ax1) and (ax1 <= bx1)) or ((ax0 >= bx0) and (ax1 >= bx1 >= ax0)) or ((ax0 <= bx0 <= ax1) and (ax1 >= bx1 >= ax0)):
                if ((by0 <= ay0) and (ay1 <= by1)) or ((ay0 <= by0 <= ay1) and (ay1 <= by1)) or ((ay0 >= by0) and (ay1 >= by1 >= ay0)) or ((ay0 <= by0 <= ay1) and (ay1 >= by1 >= ay0)):
                    overlap = True

        if overlap:
            index += 1
        else:
            return index


    return -1


place = check(terminal_positions, parsed_positions)

if place == -1:
    os.system("gnome-terminal")
else:
    os.system(terminal_strings[place])

您必须将脚本的位置包含在 PATH 变量中,然后为执行该脚本的命令分配快捷方式

相关内容