是否有可用于Ubuntu的动态多显示器友好桌面环境?


14

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

我还必须执行很多任务,因此在任何给定时间都可以打开许多窗口,并可以使用许多(虚拟)工作区来组织它们。

但是每次我连接/断开外接显示器时,我所有的细心安排都消失了。这让我真的很生气

当您连接/断开第二台显示器时,是否存在一个桌面环境只是让窗户独处?甚至更好的是,还记得每个监视器排列的窗口排列吗?因此,当我从家庭办公室(笔记本电脑屏幕顶部的17英寸显示器)到平时的工作场所(笔记本电脑屏幕左侧的21英寸显示器)或同事的办公桌(笔记本电脑屏幕右侧的19英寸显示器)去工作时, Windows会终止于最后一次连接显示器的位置-如果他们从未看到过此显示器,则窗口会保持原状。

统一“处理”外部显示器的方式让我感到难过,并希望我没有所有这些额外的显示器可以连接,一旦连接,它就使我被束缚在这种布置上,就好像把台式机钉在地板上一样。


任何窗口管理器都会发生这种情况吗?GNOME 3,KDE,LXDE,XFCE?
Braiam

我不知道。它与团结一致发生。
artm 2014年

您找到了一个好的解决方案吗?我被迫使用曾经在ubuntu上使用过的戴尔笔记本电脑,但是我已经习惯了MacBook Pro。在Mac上,有一个名为Stay的程序是必不可少的,因为它会记住每种监视器配置的窗口位置。插入监视器,所有窗口都将移至原来的位置。插入第二台显示器,它们都将再次移动。拔下电源,他们全部回到原来的位置。此外,即使没有Stay,Mac也足够智能,以确保所有窗口都可见。在这台Ubuntu笔记本电脑上,我始终需要查找屏幕外的窗口。
Greywire

我找不到像在Linux上一样的东西。看起来您可以从单个命令中获取所有信息和控制,并且下面的脚本非常接近。我正在努力改进这些以获得所需的功能...
Greywire

留下来听起来像我所缺少的。不,我没有找到解决方案。
artm 2015年

Answers:


10

我为您提供了两个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

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

在此处输入图片说明


哇,谢谢,这看起来很有希望。我将尝试这些脚本。
artm 2014年

@artm我编辑了一个小故障和一个错字,现在看来还可以。我在Unity和Gnome-fallback会话上进行了测试,应该可以在gnome3上使用。让我知道您是否遇到任何问题。
souravc 2014年

@artm决定删除时应由您决定.my_windows_config.txt。如果要为现有窗口多次加载相同的Windows配置,则可能希望保留它。但是,如果您启动一个全新的会话,则这些Windows ID将有所不同,在这种情况下,最好从删除旧的配置文件$HOME/.my_windows_config.txt。在保存新配置之前,您需要手动删除配置保存的文件。
souravc

在Ubuntu 18.04中的XFCE4上,我必须将重力(-e参数中的第一个“ 0”)更改为31,否则,将窗口还原到其所在位置左右31px。我认为这可能是默认XFCE面板的大小。感谢您的代码!
akom

-1

通用指南在这里:分辨率

您关于动态分辨率的解决方案接近XorgXrandRXinerama

您具有:
四种设置方法

  1. 通过与.xprofile的会话。

  2. 使用xrandr工具动态地

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

  4. Xrandr图形前端GUI。

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

要变通跨工作区的“ 窗口管理”,可以使用Compiz Config Manager提供的配置文件系统


2
我对分辨率或显示安排没有任何问题-这些工作按预期进行。
artm 2014年

因此,任何桌面环境都非常适合您。请不要怪公众。
快速的

我不怪任何人。我只希望打开的窗口能够在连接/断开显示器时留在放置它们的位置。
artm 2014年

因此,您有四个具有官方参考的解决方案。我的回答足以掩盖您的“疯狂”;)
迅速

2
哦,自己动手试一试:在每个工作区上打开一个窗口,然后连接显示在原始屏幕顶部的监视器,然后查看窗口的最终位置。然后告诉我,在连接显示器时,xrandr与阻止窗口随机跳跃之间的关系如何。
artm 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.