Monitör marka ve modelini ve diğer bilgileri insan tarafından okunabilir biçimde alın


19

Bilgisayara bağlı mevcut monitörün stenografi sürümünü çıkardım.
İşte bir örnek: vendor "VSC", prod id "18500"

Ubuntu'nun Monitör Tercihlerinde, olarak tanımlanır Viewsonic Corporation 16".

Bu okunabilir formu nasıl çıkarabilirim? ... ve ayrıca bir monitörün a CRTveya an olup olmadığını nasıl belirleyebilirim LCD? (bu aslında beni bu göreve başlatan şey)

EDID formatı Wikipedia'da bulunabilir: Genişletilmiş ekran tanımlama verileri
İşte EDID'yi almak için kullanılan kod VendorveProduct id

edid=$(xrandr -q --verbose | 
         sed -n '/^[[:space:]]\+00ffffffffffff00/,/[^a-fA-F0-9[:space:]]/{
                                                  /[^a-fA-F0-9[:space:]]/d
                                                  s/[[:space:]]\+//g; p}')
nibble=({0..1}{0..1}{0..1}{0..1})
vend=$(for i in {16..19} ;do 
           printf "%s" ${nibble[$((16#${edid:$i:1}))]}
       done)
vend="$(for i in 1 6 11 ;do
            printf \\x$(printf %x $((2#${vend:$i:5} +64)))
        done)"
prod=$((16#${edid:22:2}${edid:20:2}))
printf "monitor: vendor \"%s\", prod id \"%s\"\n" "${vend}" "$prod"

Edit: İşte xrandr -q verboseçıkış önde gelen ... EDID altıgen dökümü sonuna kadar

Screen 0: minimum 320 x 200, current 1280 x 960, maximum 8192 x 8192
VGA1 connected 1280x960+0+0 (0x47) normal (normal left inverted right x axis y axis) 320mm x 240mm
        Identifier: 0x41
        Timestamp:  26386
        Subpixel:   unknown
        Clones:    
        CRTC:       0
        CRTCs:      0 1
        Transform:  1.000000 0.000000 0.000000
                    0.000000 1.000000 0.000000
                    0.000000 0.000000 1.000000
                   filter: 
        EDID:
                00ffffffffffff005a63444809000000
                15090101682018b1e84f22a157479925
                0f484ffffe00315945596159714f8140
                818001010101000000ff004848393231
                30303030390a2020000000fd0032781e
                46ff000a202020202020000000fc0056
                696577536f6e696320453737000000fc
                00312d320a2020202020202020200084
  1280x1024 (0x46)  108.0MHz +HSync +VSync
        h: width  1280 start 1328 end 1440 total 1688 skew    0 clock   64.0KHz
        v: height 1024 start 1025 end 1028 total 1066           clock   60.0Hz
  1280x960 (0x47)  ....  
        ...
        ... etc

Stackoverflow.com'da benzer bir konu var .
pevik

@ peter-o muhtemelen demek
istediniz

Yanıtlar:


8

Ubuntu'nun Monitör Tercihlerinde, Viewsonic Corporation 16 "olarak tanımlanır. Bu okunabilir formu nasıl çıkarabilirim?

Bu okunabilir insan formu ( "Viewsonic Corporation" ) EDID'nizden (doğrudan) gelmiyor:
Ubuntu altında gnome kütüphaneleri kullanıyor. libgnome-desktop edid kodunu çözer ve - pnp-ids aracılığıyla - üç harfli satıcı kimliğini ( özel durumunuzda "VSC" ) görüntü için güzel bir isme dönüştürür .

gnome-pnp-ids.c , satır 51:

* Note: we now prefer to use data coming from hwdata (and shipped with gnome-desktop)*

Sistemimde

grep VSC /usr/share/hwdata/pnp.ids

İadeler:

VSC    ViewSonic Corporation

Bu bir yana, EDID'den, yani tanımlayıcı bloklardan ek bilgiler elde edilebilir. Aynı wikipedia bağlantısından:

Tanımlayıcı bloklar. Azalan tercih sırasına göre ayrıntılı zamanlama tanımlayıcıları. Tüm ayrıntılı zamanlama tanımlayıcılarından sonra ek tanımlayıcılara izin verilir:

  • Monitör aralığı sınırları (gerekli)
  • ASCII metni (monitör adı (gerekli), seri numarasını veya yapılandırılmamış metni izleyin)
  • 6 Ek standart zamanlama bilgi bloğu
  • Renk noktası verileri

Şu anda tanımlanmış tanımlayıcı türleri şunlardır:

  • 0xFF: Monitör seri numarası (metin)
  • 0xFE: Belirtilmemiş metin (metin)
  • 0xFD: Aralık sınırlarını izleyin. 6- veya 13 baytlık ikili tanımlayıcı.
  • 0xFC: Monitör adı (metin)
  • 0xFB: Ek beyaz nokta verileri. 0A 20 20 ile doldurulmuş 2 × 5 baytlık tanımlayıcılar.
  • 0xFA: Ek standart zamanlama tanımlayıcıları. 0A ile doldurulmuş 6 × 2 baytlık tanımlayıcılar.

EDID'inizde 0xFF, tanımlayıcı 1'de (bayt 54-71) (seri numarası) var:

00 ff 00 48 48 39 32 31 30 30 30 30 39 0a 20 20 00 00

ve 0xFCtanımlayıcı 3'te (monitör 90–107) ve 4'te (monitör 108–125) (monitör adı) var :

  00 fc 00 56 69 65 77 53 6f 6e 69 63 20 45 37 37 00 00
  00 fc 00 31 2d 32 0a 20 20 20 20 20 20 20 20 20 00 84

bu yüzden sadece bilgiyi oradan çıkartmak meselesidir, örneğin tanımlayıcı 3:

56 69 65 77 53 6f 6e 69 63 20 45 37 37>> Viewsonic E77

EDID'leri ayrıştıran bazı linux araçları var ... Ben kullanıyorum monitor-edid. Makinemdeki Perl damper formatında çıktı:

(
+{
          'EISA_ID' => 'CMO1574',
          'checksum' => 25,
          'detailed_timings' => [
                                  {
                                    'ModeLine' => '"1600x900" 97.75 1600 1648 1680 1760 900 903 908 926 -hsync -vsync',
                                    'ModeLine_comment' => '# Monitor preferred modeline (60.0 Hz vsync, 55.5 kHz hsync, ratio 16/9, 118 dpi)',
                                    'digital_composite' => 3,
                                    'horizontal_active' => 1600,
                                    'horizontal_blanking' => 160,
                                    'horizontal_border' => 0,
                                    'horizontal_dpi' => '118.139534883721',
                                    'horizontal_image_size' => 344,
                                    'horizontal_sync_offset' => 48,
                                    'horizontal_sync_positive' => 0,
                                    'horizontal_sync_pulse_width' => 32,
                                    'interlaced' => 0,
                                    'pixel_clock' => '97.75',
                                    'preferred' => 1,
                                    'stereo' => 0,
                                    'vertical_active' => 900,
                                    'vertical_blanking' => 26,
                                    'vertical_border' => 0,
                                    'vertical_dpi' => '118.445595854922',
                                    'vertical_image_size' => 193,
                                    'vertical_sync_offset' => 3,
                                    'vertical_sync_positive' => 0,
                                    'vertical_sync_pulse_width' => 5
                                  }
                                ],
          'diagonal_size' => '15.5292379824145',
          'edid_revision' => 3,
          'edid_version' => 1,
          'established_timings' => [],
          'extension_flag' => 0,
          'feature_support' => {
                                 'DPMS_active_off' => 0,
                                 'DPMS_standby' => 0,
                                 'DPMS_suspend' => 0,
                                 'GTF_compliance' => 0,
                                 'has_preferred_timing' => 1,
                                 'rgb' => 0,
                                 'sRGB_compliance' => 0
                               },
          'file' => '/sys/class/drm/card0-LVDS-1/edid',
          'gamma' => 120,
          'manufacturer_name' => 'CMO',
          'max_size_horizontal' => '34.4',
          'max_size_precision' => 'mm',
          'max_size_vertical' => '19.3',
          'monitor_details' => '',
          'monitor_text' => [
                              'N156O6-L01',
                              'CMO',
                              'N156O6-L01'
                            ],
          'product_code' => 5492,
          'ratio' => '1.78238341968912',
          'ratio_name' => '16/9',
          'ratio_precision' => 'mm',
          'serial_number' => 0,
          'standard_timings' => [],
          'video_input_definition' => {
                                        'composite_sync' => 0,
                                        'digital' => 1,
                                        'separate_sync' => 0,
                                        'sync_on_green' => 0,
                                        'voltage_level' => 0
                                      },
          'week' => 41,
          'year' => 2008
        }
,
)

Son olarak, bir monitörün LCD veya CRT olup olmadığını nasıl belirleyeceğimi bilmiyorum. Ben herhangi bir kütüphanenin olduğu uygular böyle fonksiyonu (gibi bilmiyorum bu bir MS'den).


Bu harika bir cevap. Çaba için teşekkürler.
Peter.O

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.