Bagaimana cara mengetahui resolusi layar saya dari skrip shell?


Jawaban:


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

Perintah xdpyinfomenampilkan berbagai informasi tentang server X Anda. Itu menulis banyak hal ke output standar tetapi kita hanya perlu baris dimulai dengan kata dimensions, jadi kita gunakan grep. Akhirnya kita gunakan seduntuk membersihkan hasilnya.


Jika Anda membutuhkan dimensi sumbu x dan y secara terpisah, Anda dapat melakukan hal berikut. Pertama, masukkan hasil dari perintah di atas ke dalam variabel menggunakan $( )sintaks (yaitu DIMENSIONS=$(xdpyinfo ...). Kemudian gunakan sedlagi untuk mendapatkan keduanya: WIDTH=$(echo $DIMENSIONS | sed -r 's/x.*//')dan HEIGHT=$(echo $DIMENSIONS | sed -r 's/.*x//').
mneri

xdpyinfomencetak pesan kesalahan jika tidak dapat mengakses informasi, jadi pengalihan kesalahan ke /dev/null. Untuk alasan ini Anda mungkin ingin menambahkan pengalihan kesalahan: xdpyinfo 2> /dev/null. Jadi, piple penuh terlihat seperti ini: xdpyinfo 2> /dev/null | grep dimensions | sed -r 's/^[^0-9]*([0-9]+x[0-9]+).*$/\1/'. Ini akan membuat skrip Anda lebih solid.
mneri

29

xdpyinfo | grep dimensionsakan memberi Anda resolusi total, jika Anda memiliki beberapa monitor, itu akan menjadi jumlah dari semuanya. xrandr --currentakan memberi Anda resolusi untuk setiap monitor.

Saya menggunakan potongan ini untuk menemukan resolusi maksimum yang mungkin untuk rDesktop tanpa pergi ke layar penuh:

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

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

Keluaran:

Xaxis = 1280
Yaxis = 1024

Minus dekorasi jendela (kurang lebih):

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

Keluaran:

MaxRes = 1275x999

Yang merupakan resolusi maksimal untuk rDesktop tanpa layar penuh.

Perintah akhir:

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

Sejauh ini berfungsi dengan baik tetapi saya belum diuji secara menyeluruh.

Contoh lain adalah untuk screencast dengan avconv:

avconv -f x11grab -r 15 -s `xrandr --current | grep  '*' | uniq | awk '{print $1}'` -i :0.0 -c:v libx264 ./output.mp4

katanya>xdpyinfo: Unable to open display "".
To Kra

Bagaimana Anda mengetahui mode yang tersedia untuk diubah?
CMCDragonkai

Jika Anda tidak perlu mengurangi untuk dekorasi jendela (dll), Anda bisa melakukannya dalam satu-liner rdesktop [other_args] -g $(xrandr --current | grep '*' | uniq | awk '{print $1}').
c24w

Ini bukan jumlah untuk beberapa monitor. Dimensi kotak pembatas yang berisi semua monitor.
Dennis Williamson

xrandr --current | grep '*' | awk -v line="$SCREEN" 'NR==line{print $1}' | cut -d 'x' -f1jika Anda ingin menentukan layar (dengan pengaturan multi-monitor) ( SCREENdiindeks 1)
SapuSeven

5

Anda bisa menggunakan xrandr -qperintah. Dari sana Anda dapat membuat skrip shell jika diperlukan.

Untuk informasi lebih lanjut tentang perintah buka di sini atau ketik man xrandr


2
###########################################
## Saya menggunakan ini dengan Program Perekaman Video.
# ukuran jendela - opsi root - informasi tentang jendela root layar
echo $ (xwininfo -root | grep 'geometry' | awk '{print $ 2;}')
# output (s): 1024x768 + 0 + 0
# tinggi x lebar + x + y posisi.
######################
## Manual Referensi ##
man xwininfo

Saya menggunakan xwininfo -root|sed '/Height/!d;s/.* //'untuk tinggi dan xwininfo -root|sed '/Width/!d;s/.* //'lebar.
hidangan penutup

1

xdpyinfoakan melakukannya, dengan beberapa penguraian. Ini memberi banyak info yang kemudian harus Anda gali nomor layar, dan dimensi dari


1

Dua alternatif yang memungkinkan dihasilkan dengan menggabungkan jawaban @ user31752 dan @ eliezer-e-vargas

Regex yang lebih sederhana:

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

atau menggunakan cut:

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

Penggunaan grep '*' | uniqdari @ eliezer-e-vargas mendapatkan garis yang berbeda (mis. "1440x900 59.90 * + 59.89") dari output xrandr, sedangkan grep 'terhubung' mendapatkan yang sederhana (mis. "LVDS1 terhubung 1440x900 + 0 + 0 ..... ").

Penggunaan regex oleh @ user31752 bagus, jadi baris yang saya gunakan membutuhkan regex yang lebih sederhana, atau dapat diganti dengan perintah cut yang lebih sederhana.

Contoh output 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)

Apakah ada alasan bagi seseorang untuk menggunakan perintah ini alih-alih yang ada dalam jawaban Eliezer E. Vargas ?
Scott

Harap edit informasi itu ke dalam jawaban Anda.
Scott

0

Seperti dalam jawaban yang diterima tetapi tidak terlalu rumit:

xdpyinfo | grep dimensions

Contoh output:

dimensions:    1366x768 pixels (361x203 millimeters)

0

Membaca Data Layar Monitor

Standar vesa menyediakan metode cara membaca resolusi layar monitor.

Extended Identification Display Data (EDID ): Standar ini mendefinisikan format data untuk membawa informasi konfigurasi, memungkinkan penggunaan tampilan yang optimal.

Monitor biasanya mendukung banyak resolusi dan penyegaran. Tentu saja seseorang akan lebih memilih yang maksimum (fisik).

Untuk membaca data monitor ini, cobalah salah satu dari solusi ini:

  • edid-decode

    Jika tidak diinstal, ketikkan

    sudo apt install edid-decode
    

    Kemudian baca edidfile tersebut

    edid-decode /sys/class/drm/card0-eDP-1/edid
    
  • baca-edid

    Instal dengan

    sudo apt install read-edid 
    

    Kemudian baca via i2c layar monitor data dan parsing

    sudo get-edid | parse-edid
    
  • Hexdump data edid

    Jika edid-tools tidak diinstal, Anda dapat membuang file edidhex, misalnya:

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

    Untuk mengenkripsi file hex ini, lihat wiki atau unduh spesifikasi edid .

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.