Saya telah memodifikasi solusi @ terdon (sangat baik) sehingga akan bekerja dengan sejumlah monitor yang ditumpuk secara horizontal dan / atau vertikal, dan mengubah cara offset diambil dari xrandr (tidak berfungsi pada pengaturan saya, mungkin disebabkan oleh perubahan dalam format output xrandr).
#!/usr/bin/env bash
OFFSET_RE="\+([-0-9]+)\+([-0-9]+)"
# Get the window position
pos=($(xwininfo -id $(xdotool getactivewindow) |
sed -nr "s/^.*geometry .*$OFFSET_RE.*$/\1 \2/p"))
# Loop through each screen and compare the offset with the window
# coordinates.
while read name width height xoff yoff
do
if [ "${pos[0]}" -ge "$xoff" \
-a "${pos[1]}" -ge "$yoff" \
-a "${pos[0]}" -lt "$(($xoff+$width))" \
-a "${pos[1]}" -lt "$(($yoff+$height))" ]
then
monitor=$name
fi
done < <(xrandr | grep -w connected |
sed -r "s/^([^ ]*).*\b([-0-9]+)x([-0-9]+)$OFFSET_RE.*$/\1 \2 \3 \4 \5/" |
sort -nk4,5)
# If we found a monitor, echo it out, otherwise print an error.
if [ ! -z "$monitor" ]
then
echo $monitor
exit 0
else
echo "Couldn't find any monitor for the current window." >&2
exit 1
fi
Perlu dicatat juga bahwa xdotool
dapat menampilkan layar tempat sebuah jendela aktif, tetapi, jika Anda menggunakan Xinerama, yang membuat semua monitor Anda muncul sebagai satu layar besar, ini hanya akan menghasilkan angka 0.
eval $(xdotool getmouselocation --shell)
akan melakukan trik. Terima kasih lagi.