Как определить, на каком дисплее отображается программа X - PullRequest
1 голос
/ 05 октября 2019

Я пытаюсь написать bash-скрипт, который будет использовать pywal для установки пользовательской темы для моего xfce4-терминала на основе фонового изображения, на котором отображается окно xfce4-терминала. В настоящее время я использую xfconf-query, чтобы вручную получить фоновое изображение рабочего стола на основе моих дисплеев, но я хотел бы иметь возможность динамически получать эту информацию, чтобы я мог перейти к новым установкам или распространить среди других людей. Я также хотел бы, чтобы скрипт обнаруживал, когда я перемещал свой терминал на другой монитор (у которого были бы другие обои). Это то, что в настоящее время используется, чтобы получить обои только для моего основного дисплея:

wallpaper="$(xfconf-query -c xfce4-desktop -p /backdrop/screen0/monitorDP-4/workspace0/last-image)"

Эта часть - то, что я хотел бы получить динамически в зависимости от того, в каком окне отображается терминал:

/backdrop/screen0/monitorDP-4/workspace0/last-image

Это то, чтоможно сделать относительно легко? Полный код ниже на случай, если это поможет

#!/bin/bash

#background_monitor.sh
#runs pywal when xfce background changes
#to do:
#1. figure out how to find what window terminal is running on then adjust for that
#2. figure out how to dynamically get /backdrop/screen0/ part so it works on other installs


wallpaper2=""
#I think I'll eventually need to get the terminal PID maybe?
#terminalPID=$(ps -ef | grep xfce4-terminal | grep -v grep | awk '{print $2}')

#this part is for passing arguments if you want to run the script from cmdline only
if [ "$1" = "1" ]
then
    wallpaper="$(xfconf-query -c xfce4-desktop -p /backdrop/screen0/monitorDP-4/workspace0/last-image)"
    break
elif [ "$1" = "2" ]
then
    wallpaper="$(xfconf-query -c xfce4-desktop -p /backdrop/screen0/monitorHDMI-0/workspace0/last-image)"
    break
fi

#this part is for running it from .bashrc so it is running when I open a term window
#currently defaults to my main display. Maybe there's a better way than infinite while loop and running from bashrc?
while :
do
    wallpaper="$(xfconf-query -c xfce4-desktop -p /backdrop/screen0/monitorDP-4/workspace0/last-image)"

    ##get which monitor terminal is currently running on would go here

    #run pywal to change terminal theme to match current desktop background
    while [ "$wallpaper" != "$wallpaper2" ]
    do
        wal -i $wallpaper -n -q
        wallpaper2="$(xfconf-query -c xfce4-desktop -p /backdrop/screen0/monitorDP-4/workspace0/last-image)"

    done
    sleep 3
done
...