Как автоматически переместить виджеты рабочего стола my-weather-indicator для внешнего монитора

Как автоматически переместить виджеты рабочего стола my-weather-indicator для внешнего монитора

Мой-Погодный-Индикаторвероятно, лучший погодный виджет для рабочего стола Ubuntu.

Однако, необходимо вручнуюпереместить виджеты рабочего стола(например, выровнен по правому верхнему краю)каждый раз при подключении внешнего мониторана ноутбук.

Как насчет скрипта запуска, который автоматически переместит виджеты рабочего стола my-weather-indicator (например, 2 "superclock") для внешнего монитора? Или любого другого (возможно, лучшего) решения?

решение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

введите описание изображения здесь

Связанный контент