46

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

8 ответов8

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

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

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
4

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

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

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
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)
1

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

0

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

xdpyinfo | grep dimensions

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

dimensions:    1366x768 pixels (361x203 millimeters)
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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .