Odpowiedzi:
xdpyinfo | grep dimensions | sed -r 's/^[^0-9]*([0-9]+x[0-9]+).*$/\1/'
Polecenie xdpyinfowyświetla różne informacje o twoim serwerze X. Zapisuje wiele rzeczy na standardowym wyjściu, ale potrzebujemy tylko linii zaczynającej się od słowa dimensions, dlatego używamy grep. Wreszcie używamy seddo czyszczenia wyniku.
xdpyinfodrukuje komunikat o błędzie, jeśli nie może uzyskać dostępu do informacji, więc przekierowanie błędu do /dev/null. Z tego powodu może chcesz dodać przekierowanie błędu: xdpyinfo 2> /dev/null. Tak, pełna piple wygląda następująco: xdpyinfo 2> /dev/null | grep dimensions | sed -r 's/^[^0-9]*([0-9]+x[0-9]+).*$/\1/'. To sprawi, że twój skrypt będzie bardziej solidny.
xdpyinfo | grep dimensionsda ci całkowitą rozdzielczość, jeśli masz wiele monitorów, będzie to suma ich wszystkich. xrandr --currentpoda rozdzielczość dla każdego monitora.
Używam tego fragmentu, aby znaleźć maksymalną możliwą rozdzielczość dla rDesktop bez przechodzenia do pełnego ekranu:
Xaxis=$(xrandr --current | grep '*' | uniq | awk '{print $1}' | cut -d 'x' -f1)
Yaxis=$(xrandr --current | grep '*' | uniq | awk '{print $1}' | cut -d 'x' -f2)
Wynik:
Xaxis = 1280
Yaxis = 1024
Minusowa dekoracja okien (mniej więcej):
MaxRes=$(($Xaxis-5))"x"$(($Yaxis-25))
Wynik:
MaxRes = 1275x999
Jaka jest maksymalna rozdzielczość dla rDesktop bez przejścia na pełny ekran.
Zakończ polecenie:
rdesktop -u $User -P -z -5 -g $MaxRes $Host &
Jak dotąd działa dobrze, ale nie przetestowałem go dokładnie.
Innym przykładem jest screencast z avconv:
avconv -f x11grab -r 15 -s `xrandr --current | grep '*' | uniq | awk '{print $1}'` -i :0.0 -c:v libx264 ./output.mp4
xdpyinfo: Unable to open display "".
rdesktop [other_args] -g $(xrandr --current | grep '*' | uniq | awk '{print $1}').
xrandr --current | grep '*' | awk -v line="$SCREEN" 'NR==line{print $1}' | cut -d 'x' -f1jeśli chcesz określić ekran (z konfiguracją wielu monitorów) ( SCREENjest indeksowany 1)
##########################################################################
## Używam tego z programem do nagrywania wideo.
# rozmiar okna - opcja root - informacje w oknie głównym ekranu
echo $ (xwininfo -root | grep 'geometria' | awk '{print 2 $;}')
Liczba wyjść: 1024 x 768 + 0 + 0
# wysokość x szerokość + x + y pozycji.
######################
## Instrukcja obsługi ##
człowiek xwininfo
xwininfo -root|sed '/Height/!d;s/.* //'wysokości i xwininfo -root|sed '/Width/!d;s/.* //'szerokości.
xdpyinfozrobi to z pewnym parsowaniem. Daje wiele informacji, z których będziesz musiał wykopać numer ekranu i wymiary
Powstały dwie możliwe alternatywy, łącząc odpowiedzi @ user31752 i @ eliezer-e-vargas
Prostsze wyrażenie regularne:
$ xrandr --current | sed -n 's/.* connected \([0-9]*\)x\([0-9]*\)+.*/\1x\2/p'
1440x900
lub za pomocą cięcia:
$ xrandr --current | grep ' connected ' | cut -d ' ' -f 3 | cut -d '+' -f 1
1440x900
Zastosowanie grep '*' | uniq@ eliezer-e-vargas daje inną linię (np. „1440x900 59,90 * + 59,89”) wyjścia xrandr, podczas gdy grep „podłączony” dostaje prosty (np. „LVDS1 podłączony 1440x900 + 0 + 0 ..... ”).
Użycie wyrażenia regularnego przez @ user31752 jest miłe, więc linia, której używam, wymaga prostszego wyrażenia regularnego lub może zostać zastąpiona prostszym poleceniem cięcia.
Przykładowy wynik xrandr
$ xrandr --current
Screen 0: minimum 320 x 200, current 1440 x 900, maximum 8192 x 8192
LVDS1 connected 1440x900+0+0 (normal left inverted right x axis y axis) 331mm x 207mm
1440x900 59.90*+ 59.89
1360x768 59.80 59.96
1152x864 60.00
1024x768 60.00
800x600 60.32 56.25
640x480 59.94
VGA1 disconnected (normal left inverted right x axis y axis)
HDMI1 disconnected (normal left inverted right x axis y axis)
DP1 disconnected (normal left inverted right x axis y axis)
Jak w zaakceptowanej odpowiedzi, ale mniej skomplikowanej:
xdpyinfo | grep dimensions
Przykład wyniku:
dimensions: 1366x768 pixels (361x203 millimeters)
Standard Vesa zapewnia metodę odczytu rozdzielczości ekranu monitora.
Rozszerzone dane identyfikacyjne wyświetlacza (EDID ): Ten standard określa formaty danych do przenoszenia informacji o konfiguracji, umożliwiając optymalne wykorzystanie wyświetlaczy.
Monitor zazwyczaj obsługuje wiele rozdzielczości i odświeżeń. Oczywiście ktoś preferuje maksymalny (fizyczny).
Aby odczytać dane z tego monitora, wypróbuj jedno z następujących rozwiązań:
edid-decode
Jeśli nie jest zainstalowany, wpisz
sudo apt install edid-decode
Następnie przeczytaj edidplik
edid-decode /sys/class/drm/card0-eDP-1/edid
read-edid
Zainstaluj za pomocą
sudo apt install read-edid
Następnie za pomocą i2c odczytaj dane monitora ekranu i parsuj je
sudo get-edid | parse-edid
Zrzuć szesnastkowo edid dane
W przypadku, gdy edid-tools nie są zainstalowane, możesz zrzucić edidplik hex, np .:
hd /sys/class/drm/card0-eDP-1/edid
Aby zaszyfrować ten plik hex, zajrzyj na wiki lub pobierz specyfikację edid .
$( )składni (tjDIMENSIONS=$(xdpyinfo ....). Następnie użyjsedponownie, aby uzyskać dwa:WIDTH=$(echo $DIMENSIONS | sed -r 's/x.*//')iHEIGHT=$(echo $DIMENSIONS | sed -r 's/.*x//').