Odpowiedzi:
xdpyinfo | grep dimensions | sed -r 's/^[^0-9]*([0-9]+x[0-9]+).*$/\1/'
Polecenie xdpyinfo
wyś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 sed
do czyszczenia wyniku.
xdpyinfo
drukuje 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 dimensions
da ci całkowitą rozdzielczość, jeśli masz wiele monitorów, będzie to suma ich wszystkich. xrandr --current
poda 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' -f1
jeśli chcesz określić ekran (z konfiguracją wielu monitorów) ( SCREEN
jest 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.
xdpyinfo
zrobi 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 edid
plik
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ć edid
plik 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żyjsed
ponownie, aby uzyskać dwa:WIDTH=$(echo $DIMENSIONS | sed -r 's/x.*//')
iHEIGHT=$(echo $DIMENSIONS | sed -r 's/.*x//')
.