Відповіді:
xdpyinfo | grep dimensions | sed -r 's/^[^0-9]*([0-9]+x[0-9]+).*$/\1/'
Команда xdpyinfo
відображає різну інформацію про ваш X-сервер. Він записує багато речей до стандартного виводу, але нам потрібен лише рядок, починаючи зі слова dimensions
, таким чином ми використовуємо grep
. Нарешті ми використовуємо sed
для очищення результату.
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/'
. Це зробить ваш сценарій більш міцним.
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 "".
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
якщо ви хочете вказати екран (із встановленням кількох моніторів) ( SCREEN
1-індексований)
################################################################ ## Я використовую це з програмою відеозапису. # розмір вікна - опція кореня - інформація про кореневе вікно екрана echo $ (xwininfo -root | grep 'геометрія | | awk' {print $ 2;} ') # вихід (и): 1024x768 + 0 + 0 # висота х ширина + х + у позицій. ####################### ## Довідковий посібник ## людина xwininfo
xwininfo -root|sed '/Height/!d;s/.* //'
для висоти і xwininfo -root|sed '/Width/!d;s/.* //'
для ширини.
xdpyinfo
зробимо це, з деяким розбором. Він дає багато інформації, з якої потім доведеться викопати номер екрана та розміри
Дві можливі альтернативи, поєднуючи відповіді @ 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)
Як у прийнятій відповіді, але менш складною:
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
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 .
$( )
синтаксису (тобтоDIMENSIONS=$(xdpyinfo ...
). Потімsed
знову використовуйте для отримання двох:WIDTH=$(echo $DIMENSIONS | sed -r 's/x.*//')
іHEIGHT=$(echo $DIMENSIONS | sed -r 's/.*x//')
.