Как узнать разрешение экрана по сценарию оболочки?

Ответы:

53
xdpyinfo | grep dimensions | sed -r 's/^[^0-9]*([0-9]+x[0-9]+).*$/\1/'

команда xdpyinfo отображает различную информацию о вашем X-сервере. Он пишет много вещей в стандартный вывод, но нам нужна только строка, начинающаяся со слова dimensionsТаким образом, мы используем grep, Наконец мы используем sed убрать результат.

Community
источник
Если вам нужен размер оси x и y отдельно, вы можете сделать следующее. Сначала поместите результат вышеупомянутой команды в переменную, используя $( ) синтаксис (т.е. DIMENSIONS=$(xdpyinfo ... ). Тогда используйте sed еще раз, чтобы получить два: WIDTH=$(echo $DIMENSIONS | sed -r 's/x.*//') а также HEIGHT=$(echo $DIMENSIONS | sed -r 's/.*x//'),
mneri
xdpyinfo выдает сообщение об ошибке, если не может получить доступ к информации, поэтому перенаправление ошибки /dev/null, По этой причине вы можете добавить перенаправление ошибок: xdpyinfo 2> /dev/null, Итак, полный трубопровод выглядит так: xdpyinfo 2> /dev/null | grep dimensions | sed -r 's/^[^0-9]*([0-9]+x[0-9]+).*$/\1/', Это сделает ваш сценарий более солидным.
mneri
27

xdpyinfo | grep dimensions даст вам общее разрешение, если у вас есть несколько мониторов, это будет сумма всех их. xrandr --current даст вам разрешение для каждого монитора.

Я использую этот фрагмент, чтобы найти максимально возможное разрешение для rDesktop, не переходя на полный экран:

Xaxis=$(xrandr --current | grep '*' | uniq | awk '{print $1}' | cut -d 'x' -f1)

Yaxis=$(xrandr --current | grep '*' | uniq | awk '{print $1}' | cut -d 'x' -f2)

Выход:

Xaxis = 1280
Yaxis = 1024

Минус оформление окон (более или менее):

MaxRes=$(($Xaxis-5))"x"$(($Yaxis-25))

Выход:

MaxRes = 1275x999

Какое максимальное разрешение для rDesktop без перехода на весь экран

Завершить команду:

rdesktop -u $User -P -z -5 -g $MaxRes $Host &

Пока все работает нормально, но я не проверил тщательно.

Другой пример для скринкаста с avconv:

avconv -f x11grab -r 15 -s `xrandr --current | grep  '*' | uniq | awk '{print $1}'` -i :0.0 -c:v libx264 ./output.mp4
Eliezer E. Vargas
источник
это говорит & gt; xdpyinfo: Unable to open display "".
To Kra
Как узнать, какие режимы можно изменить?
CMCDragonkai
Если вам не нужно вычитать для оформления окна (и т. Д.), Вы можете сделать это в одну строку rdesktop [other_args] -g $(xrandr --current | grep '*' | uniq | awk '{print $1}'),
c24w
4

Вы могли бы использовать xrandr -q команда. Из этого вы можете создать сценарий оболочки, если это необходимо.

Для получения дополнительной информации о команде перейдите Вот или введите человек ксандр

ricbax
источник
2
#############################################
## I use this with a Video Recording Program.
#  window size --root option - information on the screen's root window
echo $(xwininfo -root | grep 'geometry' | awk '{print $2;}')
# output(s): 1024x768+0+0
#            height x width + x + y positions.
######################
## Reference Manual ##
man xwininfo
JimmyLandStudios
источник
я использовал xwininfo -root|sed '/Height/!d;s/.* //' для высоты и xwininfo -root|sed '/Width/!d;s/.* //' для ширины.
dessert
1

xdpyinfo сделаю это, с некоторым разбором. Он дает много информации, которую вам нужно будет затем выкопать номер экрана и размеры из

Rich Homolka
источник
1

Созданы две возможные альтернативы, объединяющие ответы @ user31752 и @ eliezer-e-vargas

Более простое регулярное выражение:

$ xrandr --current | sed -n 's/.* connected \([0-9]*\)x\([0-9]*\)+.*/\1x\2/p'
1440x900

или используя вырезать:

$ xrandr --current | grep ' connected ' | cut -d ' ' -f 3 | cut -d '+' -f 1
1440x900

Использование grep '*' | uniq из @ eliezer-e-vargas получить другую строку (например, "1440x900 59.90 * + 59.89") выхода xrandr, тогда как grep 'connected' получает простую (например, LVDS1 подключен 1440x900 + 0 + 0 ... .. ").

Использование regex @ user31752 приятно, поэтому строка, которую я использую, нуждается в более простом регулярном выражении или может быть заменена простой командой cut.

Пример вывода 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)
campisano
источник
Есть ли причина для кого-то использовать эти команды вместо Элиэзер Э. Варгас ответ ?
Scott
пожалуйста редактировать эта информация в ваш ответ.
Scott
0

Как и в принятом ответе, но менее сложный:

xdpyinfo | grep dimensions

Пример вывода:

dimensions:    1366x768 pixels (361x203 millimeters)
Billal Begueradj
источник
0

Чтение данных с экрана монитора

Стандарт vesa предоставляет метод определения разрешения экрана монитора.

Расширенные данные идентификации дисплея (EDID ): Это стандарт   определяет форматы данных для переноса информации о конфигурации, что позволяет   оптимальное использование дисплеев.

Монитор обычно поддерживает несколько разрешений и обновлений. Конечно, кто-то предпочтет максимальный (физический).

Чтобы прочитать данные этого монитора, попробуйте одно из следующих решений:

  • EDID-декодирования

    Если не установлено, введите

    sudo apt install edid-decode
    

    Тогда прочитайте edid файл

    edid-decode /sys/class/drm/card0-eDP-1/edid
    
  • чтения EDID

    Установить с

    sudo apt install read-edid 
    

    Затем прочитайте через i2c данные монитора экрана и проанализируйте их

    sudo get-edid | parse-edid
    
  • Hexdump edid данные

    Если edid-инструменты не установлены, вы можете сбросить edid шестнадцатеричный файл, например:

    hd /sys/class/drm/card0-eDP-1/edid
    

    Чтобы зашифровать этот шестнадцатеричный файл, взгляните на вики или скачать Edid спецификации ,

abu_bua
источник