保存 Windows 配置的脚本

保存 Windows 配置的脚本

我使用笔记本电脑,喜欢在白天从一个(物理)工作场所迁移到另一个工作场所,并连接到外部显示器(如果可用)。

我还必须进行很多多项任务,因此我必须在任意时刻打开很多窗口,并且在许多(虚拟)工作区中对它们进行组织。

但每次我连接/断开外接显示器时,我所有的精心安排都化为泡影。这让我非常生气

有没有一种桌面环境,当你连接/断开第二台显示器时,窗口会保持原样?或者更好的是,它能记住每个显示器的窗口排列?这样,当我从家庭办公室(笔记本电脑屏幕上方的 17 英寸显示器)走到我通常的工作场所(笔记本电脑屏幕左侧的 21 英寸显示器)或同事的办公桌(笔记本电脑屏幕右侧的 19 英寸显示器)时,窗口会回到上次连接显示器时的位置 - 或者如果它们从未见过这台显示器,则保持原样。

Unity“处理”外部显示器的方式让我很难过,希望我没有所有这些额外的显示器需要连接,一旦我连接它就会让我被束缚在这种安排上,就好像我有一台台式机钉在地板上一样。

答案1

我为你提供了两个 shell 脚本。它将帮助你保存窗口位置和大小的排列。如果您想要的窗户布置因某种原因被打乱,您将能够恢复使用这些脚本,可以为所有窗口安排精确的窗口大小和位置。

除非您已经拥有它,否则您需要安装wmctrl它。通过终端安装,

sudo apt-get install wmctrl

保存 Windows 配置的脚本

# Script_Name: save_window_conf.sh
#!/bin/bash
if [ -f $HOME/.my_windows_config.txt ]; then
    echo -e "Information: Previous configuration file \"$HOME/.my_windows_config.txt\" already exists.\nTo save a new configuration remove it manually using the following command,\n\n\trm $HOME/.my_windows_config.txt"
    exit 1
else
    wmctrl -p -G -l | awk '($2 != -1)&&($3 != 0)&&($NF != "Desktop")' | awk '{print $1}' | while read mywinid
    do
        xwininfo -id "$mywinid" >> $HOME/.my_windows_config.txt
    done
fi

执行时,上述脚本会将所有打开的窗口的位置和大小保存到.my_windows_config.txt主目录中的文件中。这是一个隐藏的文本文件。

重新加载 Windows 配置的脚本

# Script_Name: load_window_conf.sh
#!/bin/bash

file=$HOME/.my_windows_config.txt
declare -a mywinid
declare -a x
declare -a y
declare -a width
declare -a height

nl=$(cat "$file" | grep xwininfo |wc -l)

for i in $(seq 1 $nl)
do
    mywinid[i]=$(cat "$file" | grep "xwininfo" | awk -v p="$i" '{if(NR==p) print $4}')
    x[i]=$(cat "$file" | grep "Absolute upper-left X" | awk -v p="$i" '{if(NR==p) print $NF}')
    y[i]=$(cat "$file" | grep "Absolute upper-left Y" | awk -v p="$i" '{if(NR==p) print $NF}')
    width[i]=$(cat "$file" | grep "Width" | awk -v p="$i" '{if(NR==p) print $NF}')
    height[i]=$(cat "$file" | grep "Height" | awk -v p="$i" '{if(NR==p) print $NF}')
done

for it in $(seq 1 $nl)
do
    wmctrl -i -r "${mywinid[$it]}" -e 0,"${x[$it]}","${y[$it]}","${width[it]}","${height[it]}"
done

当您执行第二个脚本时,它将恢复所有窗口的准确大小以及窗口位置。

用法

将这些脚本保存在您的$HOME/bin/目录中。$HOME/bin/在您的 中添加PATH。为此,在您的$HOME/.bashrc

PATH=$HOME/bin:$PATH
export PATH

它将使您能够仅使用其名称来执行这些脚本。授予脚本执行权限,

chmod +x $HOME/bin/save_window_conf.sh
chmod +x $HOME/bin/load_window_conf.sh

要将配置保存在您的$HOME/.my_windows_config.txt

打开并调整所有窗口在终端中运行后,

save_window_conf.sh

要从您的$HOME/.my_windows_config.txt

load_window_conf.sh

希望它能解决你的问题。这是屏幕截图,

在此处输入图片描述

答案2

常用指南在这里:解决

你关于动态分辨率的解决方案接近韓國&瑞德或者新内拉玛

您有:
四种设置方法

  1. 通过 .xprofile 会话。

  2. 使用 xrandr 工具动态

  3. 通过在 xorg.conf 中静态设置。

  4. Xrandr 图形前端 GUI。

好的答案是不存储多台显示器的设置

要解决您的窗口管理您可以在工作区中使用剖析系统给出Compiz配置管理器

相关内容