Ubuntu: How to automatically reposition my-weather-indicator desktop widgets for external monitor



Question:

My-Weather-Indicator is probably the best weather widget for Ubuntu desktop.

However, one needs to manually reposition desktop widgets (e.g. aligned top right) every time an external monitor is connected to a laptop.

How about a startup script that will automatically reposition my-weather-indicator's (e.g. 2 "superclock") desktop widgets for external monitor? Or any other (perhaps better) solution?


Solution:1

Here is a sample startup script

that can be entered into the Exec= line of ~/.config/autostart/my-weather-indicator.desktop file instead of the command /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  

CAUTION: This script has only been tested on a DELL Latitude laptop with 2 desktop widgets using the superclock theme, and might require some further fine-tuning, and it might be a good idea to check if the variables used here will also work in other systems by checking the terminal output of the command xrandr

enter image description here


Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »