사람이 읽을 수있는 형태로 모니터 제조업체 및 모델 및 기타 정보 얻기


19

컴퓨터에 연결된 현재 모니터의 속기 버전을 추출했습니다.
예를 들면 다음과 같습니다. vendor "VSC", prod id "18500"

우분투의 모니터 환경 설정에서로 식별됩니다 Viewsonic Corporation 16".

사람이 읽을 수있는 양식을 추출하려면 어떻게해야합니까? ... 그리고 모니터가 CRT또는 인지 어떻게 알 수 LCD있습니까? (이것은 실제로이 퀘스트에서 시작한 것입니다)

EDID 형식은 Wikipedia에서 찾을 수 있습니다. 확장 표시 식별 데이터
다음은 EDID VendorProduct 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"

편집 : 다음은 xrandr -q verboseEDID 16 진수 덤프의 끝까지 outpt 의 주요 행입니다.

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에도 비슷한 주제가 있습니다 .
pevik

@ peter-o 아마도 xrandr -q --verbose (명령에 오타)를 의미했을 것입니다
dovah

답변:


8

Ubuntu의 모니터 기본 설정에서 Viewsonic Corporation 16 "으로 식별됩니다.이 사람이 읽을 수있는 양식을 추출하려면 어떻게해야합니까?

인간이 읽을 수있는 형식 ( "Viewsonic Corporation" )은 EDID에서 직접 제공하지 않습니다.
Ubuntu는 그놈 라이브러리를 아래에서 사용합니다. libgnome-desktop edid를 디코딩하고 pnp-ids 를 통해 3 자리 공급 업체 ID ( 특정 경우 "VSC" )를 디스플레이 의 예쁜 이름 으로 변환합니다.

gnome-pnp-ids.c , 라인 51 :

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

내 시스템에서

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

보고:

VSC    ViewSonic Corporation

그 외에도 EDID, 즉 디스크립터 블록에서 추가 정보를 추출 할 수 있습니다. 동일한 위키 백과 링크에서 :

설명자 블록. 기본 설정 순서가 감소하는 자세한 타이밍 설명자. 모든 자세한 타이밍 설명자 후에 추가 설명자가 허용됩니다.

  • 모니터 범위 제한 (필수)
  • ASCII 텍스트 (모니터 이름 (필수), 모니터 일련 번호 또는 구조화되지 않은 텍스트)
  • 6 추가 표준 타이밍 정보 블록
  • 컬러 포인트 데이터

현재 정의 된 설명자 유형은 다음과 같습니다.

  • 0xFF : 모니터 일련 번호 (텍스트)
  • 0xFE : 지정되지 않은 텍스트 (텍스트)
  • 0xFD : 모니터 범위 제한. 6 바이트 또는 13 바이트 이진 설명자
  • 0xFC : 모니터 이름 (텍스트)
  • 0xFB : 추가 화이트 포인트 데이터. 2 개의 5 바이트 디스크립터, 0A 20 20으로 채워짐.
  • 0xFA : 추가 표준 타이밍 식별자. 6 개의 2 바이트 디스크립터, 0A로 채워짐.

EDID 0xFF에는 설명자 1 (바이트 54-71)에 (일련 번호)가 있습니다.

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

그리고 당신은 0xFC기술자 3 (90-107 바이트) 및 4 (108-125 바이트)에 (모니터 이름) :

  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

설명자 3과 같이 정보를 추출하기 만하면됩니다.

56 69 65 77 53 6f 6e 69 63 20 45 37 37>> 뷰소닉 E77

EDID를 파싱하는 리눅스 도구가 있습니다 ... 사용 monitor-edid합니다. 내 컴퓨터의 Perl 덤퍼 형식의 출력은 다음과 같습니다.

(
+{
          '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
        }
,
)

마지막으로 모니터가 LCD인지 CRT인지 (Linux에서) 결정하는 방법을 모르겠습니다. 나는 어떤 라이브러리의 구현 등의 기능 (같은 모르는 이 하나의 MS에서)입니다.


좋은 답변입니다. 노력해 주셔서 감사합니다.
Peter.O

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.