Як дізнатися свою роздільну здатність екрана за допомогою сценарію оболонки?


48

Як дізнатися свою роздільну здатність екрана за допомогою сценарію оболонки?

Відповіді:


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

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


Якщо вам потрібні розміри осі 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. Таким чином, повний piple виглядає наступним чином : xdpyinfo 2> /dev/null | grep dimensions | sed -r 's/^[^0-9]*([0-9]+x[0-9]+).*$/\1/'. Це зробить ваш сценарій більш міцним.
mneri

29

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

в ньому сказано>xdpyinfo: Unable to open display "".
До

Як дізнатись доступні режими змінити?
CMCDragonkai

Якщо вам не потрібно віднімати оздоблення вікон (тощо), це можна зробити в одній підводці rdesktop [other_args] -g $(xrandr --current | grep '*' | uniq | awk '{print $1}').
c24w

Це не сума для кількох моніторів. Це розміри обмежувальної коробки, в якій є всі монітори.
Денніс Вільямсон

xrandr --current | grep '*' | awk -v line="$SCREEN" 'NR==line{print $1}' | cut -d 'x' -f1якщо ви хочете вказати екран (із встановленням кількох моніторів) ( SCREEN1-індексований)
SapuSeven

5

Ви можете використовувати xrandr -qкоманду. З цього ви можете створити сценарій оболонки, якщо це необхідно.

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


2
################################################################
## Я використовую це з програмою відеозапису.
# розмір вікна - опція кореня - інформація про кореневе вікно екрана
echo $ (xwininfo -root | grep 'геометрія | | awk' {print $ 2;} ')
# вихід (и): 1024x768 + 0 + 0
# висота х ширина + х + у позицій.
#######################
## Довідковий посібник ##
людина xwininfo

Я використовував xwininfo -root|sed '/Height/!d;s/.* //'для висоти і xwininfo -root|sed '/Width/!d;s/.* //'для ширини.
десерт

1

xdpyinfoзробимо це, з деяким розбором. Він дає багато інформації, з якої потім доведеться викопати номер екрана та розміри


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, тоді як греп "підключений" отримує простий (напр. "LVDS1 підключений 1440x900 + 0 + 0 ..... ").

Використання регексу від @ user31752 є приємним, тому рядок, який я використовую, потребує більш простого регексу, або його можна замінити на більш просту команду вирізання.

Приклад 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)

Чи є хтось причин використовувати ці команди замість тих, що відповідають у відповіді Елієзера Е. Варгаса ?
Скотт

Будь ласка, відредагуйте цю інформацію у своїй відповіді.
Скотт

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
    
  • read-edid

    Встановити за допомогою

    sudo apt install read-edid 
    

    Потім читайте через i2c дані монітора екрана та аналізуйте їх

    sudo get-edid | parse-edid
    
  • Hexdump дані Edid

    Якщо Edid-інструменти не встановлені, ви можете скинути edidшістнадцятковий файл, наприклад:

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

    Щоб зашифрувати цей шістнадцятковий файл, перегляньте wiki або скачайте специфікації edid .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.