如何自动重新定位我的天气指示器桌面小部件以适应外接显示器

如何自动重新定位我的天气指示器桌面小部件以适应外接显示器

我的天气指示器可能是 Ubuntu 桌面上最好的天气小工具。

然而,需要手动重新定位桌面小部件(例如右上对齐)每次连接外接显示器时到笔记本电脑。

启动脚本可以自动重新定位 my-weather-indicator(例如 2 个“超级时钟”)桌面小部件以用于外部显示器,怎么样?或者还有其他(也许更好的)解决方案?

答案1

以下是示例启动脚本

可以将其输入到文件Exec=行中~/.config/autostart/my-weather-indicator.desktop而不是命令中/opt/extras.ubuntu.com/my-weather-indicator/bin/my-weather-indicator

#!/bin/bash

while true
do
    MONITORS="$(xrandr | grep -v "eDP1 " | grep -c " connected ")"
    if [[ "$MONITORS" -eq 0 ]]                              # no external monitor, LCD panel only
    then
        MONINTX="$(xrandr | grep "eDP1 connected " | sed -e 's/^eDP1 connected primary //g' -e 's/x.*$//g')"
        MONINTV="$(expr $MONINTX - 316)"
        MONINT1="$(grep -c "\"wp1-x\": $MONINTV" "/home/$USER/.config/my-weather-indicator/my-weather-indicator.conf")"
        if  [[ "$MONINT1" -eq 0 ]]                          # widget1 not configured for LCD panel
        then
            sed -i "s/\"wp1\-x\"\: [0-9]*/\"wp1\-x\"\: $MONINTV/" "/home/$USER/.config/my-weather-indicator/my-weather-indicator.conf"
            echo "REFRESH" > "/tmp/my-weather-indicator_mon-int"
        fi
        MONINT2="$(grep -c "\"wp2-x\": $MONINTV" "/home/$USER/.config/my-weather-indicator/my-weather-indicator.conf")"
        if  [[ "$MONINT2" -eq 0 ]]                          # widget2 not configured for LCD panel
        then
            sed -i "s/\"wp2\-x\"\: [0-9]*/\"wp2\-x\"\: $MONINTV/" "/home/$USER/.config/my-weather-indicator/my-weather-indicator.conf"
            echo "REFRESH" > "/tmp/my-weather-indicator_mon-int"
        fi
        if [ -f "/tmp/my-weather-indicator_mon-int" ]       # marker file
        then
            if [ -s "/tmp/my-weather-indicator_mon-int" ]   # content
            then
                PID="$(ps -e -o pid,cmd | grep "/usr/bin/python3 /opt/extras.ubuntu.com/my-weather-indicator/bin/my-weather-indicator" | egrep -v grep | awk '{print$1}')"
                if [[ "$PID" -eq 0 ]]                       # not running, start
                then
                    rm "/tmp/my-weather-indicator_mon-int"
                    "/opt/extras.ubuntu.com/my-weather-indicator/bin/my-weather-indicator" &
                else
                    kill -9 "$PID"                          # running, re-start
                    rm "/tmp/my-weather-indicator_mon-int"
                    "/opt/extras.ubuntu.com/my-weather-indicator/bin/my-weather-indicator" &
                fi
            fi
        fi
    else                                                    # external monitor connected
        MONEXTX="$(xrandr | grep " connected " | grep -v "eDP1" | sed -e 's/^e*[A-Z]*[A-Z][A-Z][0-9] connected primary //g' -e 's/x.*$//g')"
        MONEXTV="$(expr $MONEXTX - 316)"
        MONEXT1="$(grep -c "\"wp1-x\": $MONEXTV" "/home/$USER/.config/my-weather-indicator/my-weather-indicator.conf")"
        if  [[ "$MONEXT1" -eq 0 ]]                          # widget1 not configured for external monitor
        then
            sed -i "s/\"wp1\-x\"\: [0-9]*/\"wp1\-x\"\: $MONEXTV/" "/home/$USER/.config/my-weather-indicator/my-weather-indicator.conf"
            echo "REFRESH" > "/tmp/my-weather-indicator_mon-ext"
        fi
        MONEXT2="$(grep -c "\"wp2-x\": $MONEXTV" "/home/$USER/.config/my-weather-indicator/my-weather-indicator.conf")"
        if  [[ "$MONEXT2" -eq 0 ]]                          # widget2 not configured for external monitor
        then
            sed -i "s/\"wp2\-x\"\: [0-9]*/\"wp2\-x\"\: $MONEXTV/" "/home/$USER/.config/my-weather-indicator/my-weather-indicator.conf"
            echo "REFRESH" > "/tmp/my-weather-indicator_mon-ext"
        fi
        if [ -f "/tmp/my-weather-indicator_mon-ext" ]       # marker file
        then
            if [ -s "/tmp/my-weather-indicator_mon-ext" ]   # content
            then
                PID="$(ps -e -o pid,cmd | grep "/usr/bin/python3 /opt/extras.ubuntu.com/my-weather-indicator/bin/my-weather-indicator" | egrep -v grep | awk '{print$1}')"
                if [[ "$PID" -eq 0 ]]                       # not running, start
                then
                    rm "/tmp/my-weather-indicator_mon-ext"
                    "/opt/extras.ubuntu.com/my-weather-indicator/bin/my-weather-indicator" &
                else
                    kill -9 "$PID"                          # running, re-start
                    rm "/tmp/my-weather-indicator_mon-ext"
                    "/opt/extras.ubuntu.com/my-weather-indicator/bin/my-weather-indicator" &
                fi
            fi
        fi
    fi
    PID="$(ps -e -o pid,cmd | grep "/usr/bin/python3 /opt/extras.ubuntu.com/my-weather-indicator/bin/my-weather-indicator" | egrep -v grep | awk '{print$1}')"
    if [[ "$PID" -eq 0 ]]                                   # not running, start
    then
        "/opt/extras.ubuntu.com/my-weather-indicator/bin/my-weather-indicator" &
    fi
    sleep 12
done

警告:此脚本仅在 DELL Latitude 笔记本电脑上测试过,2 个桌面小工具使用超级时钟主题,可能需要进一步微调,通过检查命令的终端输出来检查这里使用的变量是否也能在其他系统中工作可能是个好主意xrandr

在此处输入图片描述

相关内容