Как узнать разрешение экрана из сценария оболочки?
8 ответов
xdpyinfo | grep dimensions | sed -r 's/^[^0-9]*([0-9]+x[0-9]+).*$/\1/'
Команда xdpyinfo
отображает различную информацию о вашем X-сервере. Он много чего пишет в стандартный вывод, но нам нужна только строка, начинающаяся со слова dimensions
, поэтому мы используем grep
. Наконец мы используем sed
для очистки результата.
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
Вы можете использовать команду xrandr -q
. Из этого вы можете создать сценарий оболочки, если это необходимо.
Для получения дополнительной информации о команде перейдите сюда или введите man xrandr
############################################# ## 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
Созданы две возможные альтернативы, объединяющие ответы @ 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)
xdpyinfo
сделает это с небольшим разбором. Он дает много информации, которую вам нужно будет затем выкопать номер экрана и размеры из
Как и в принятом ответе, но менее сложный:
xdpyinfo | grep dimensions
Пример вывода:
dimensions: 1366x768 pixels (361x203 millimeters)
Чтение данных с экрана монитора
Стандарт 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.