컴퓨터에 연결된 현재 모니터의 단축 버전을 추출했습니다.
예는 다음과 같습니다. vendor "VSC", prod id "18500"
Ubuntu의 모니터 기본 설정에서는 Viewsonic Corporation 16"
.
이것을 사람이 읽을 수 있는 형식으로 어떻게 추출할 수 있나요? ...또한 모니터가 a CRT
인지 a 인지 어떻게 확인합니까 LCD
? (실제로 제가 이 미션을 시작한 이유도 이것입니다)
EDID 형식은 Wikipedia에서 찾을 수 있습니다.식별 데이터의 확장된 표시Vendor
EDID를 가져오는 데 사용되는 코드입니다.Product 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 verbose
편집: 다음은 EDID 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
답변1
Ubuntu의 모니터 기본 설정에서는 Viewsonic Corporation 16"으로 식별됩니다. 이를 사람이 읽을 수 있는 형식으로 어떻게 추출합니까?
사람이 읽을 수 있는 형식("뷰소닉 주식회사")은 EDID에서 직접 제공되지 않습니다. Ubuntu는 다음 gnome 라이브러리를 사용합니다. libgnome-desktop
edid를 디코딩하여 pnp.ids
3자리 공급업체 ID("VSC"귀하의 특별한 경우)는 "표시할 예쁜 이름입니다.
내 시스템에서는" 으로 번역됩니다.
grep VSC /usr/share/hwdata/pnp.ids
반품:
VSC ViewSonic Corporation
이 외에도 EDID(예: 설명자 블록)에서 추가 정보를 추출할 수 있습니다. 동일한 Wikipedia 링크에서:
설명자 블록. 자세한 타이밍 설명(우선순위 내림차순). 모든 세부 타이밍 설명자 뒤에는 추가 설명자가 허용됩니다.
- 모니터링 범위 제한(필수)
- 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
마지막으로 모니터가 LCD인지 CRT인지 (리눅스에서) 확인하는 방법을 모르겠습니다. 나는 그러한 기능을 구현하는 라이브러리를 모릅니다(예:이것마이크로소프트에서).
답변2
이와 같은 것이 더 잘 작동할 것입니다(여기의 다른 모든 답변은 100% 작동하지 않습니다).
for file in `ls -1 /sys/class/drm/*/edid`; do text=$(tr -d '\0' <"$file"); if [ -n "$text" ]; then edid-decode "$file" | grep -e Manufacturer: -e Product; sleep 0.0001; fi done
여기서는 두 개의 모니터로 테스트했습니다. 내 기본 모니터는 내장 노트북 모니터이고 보조 모니터는 DELL 25인치입니다. 출력은 다음과 같습니다.
Manufacturer: DELL Model 53359 Serial Number 809781068
Display Product Serial Number: YKFWP5790DGL
Display Product Name: DELL U2515H
Manufacturer: LGD Model 1133 Serial Number 0
edid-decode
배포판에 설치되어 있어야 합니다 . 내 설정은 DELL Latitude e5450 및 Ubuntu 20.04입니다.
답변3
다음 도구는 EDID 정보를 디코딩하는 데 도움이 될 수 있습니다. http://cgit.freedesktop.org/xorg/app/edid-decode
답변4
저는 Ubuntu 16.04 LTE를 실행하는 오래된 컴퓨터에 연결하는 일부 Dell 평면 패널 모니터 모델을 구하려고 노력해 왔습니다. 이것이 마침내 나를 위해 일한 것입니다.
- edid-decode 패키지를 설치했습니다.
$ sudo 적절한 업데이트 $ sudo apt install -y edid 디코드
- edid-decode 매뉴얼 페이지에는 다음과 같이 나와 있습니다.
요약 edid 디코딩 [입력] [출력] 설명하다 [...]에는 두 개의 인수가 있으며 일반 출력은 억제됩니다. 바이너리 EDID blob은 다음에 의해 작성됩니다. 두 번째 주장. [...] 노트 모든 필드가 디코딩되거나 완전히 디코딩되는 것은 아닙니다. 일부 필드를 디코딩하면 출력이 손상될 수 있습니다...
손상된 출력에 대한 "설명" 섹션 아래의 설명이 나에게 발생합니다. edid-decode를 실행하면 사람이 읽을 수 있는 일부 텍스트가 출력되기 전에 일부 잘못된 출력(인쇄되지 않는 문자)이 생성됩니다.
매뉴얼 페이지의 정보를 바탕으로 다음 명령줄을 시도했습니다.
$ edid-decode/sys/class/drm/card0/card0-VGA-1/edid vga.edid
불행하게도 이것은 출력 파일을 생성하지 않습니다 vga.edid
. 따라서 이름이 빈 파일을 수동으로 만들고 vga.edid
edid-decode 명령줄을 다시 실행했습니다.
$touchvga.edid $ edid-decode/sys/class/drm/card0/card0-VGA-1/edid vga.edid
이번에는 edid-decode가 EDID 데이터를 출력 파일에 덤프합니다 vga.edid
.
다음으로, 애플리케이션을 사용하여 xxd
파일 내용의 16진수 덤프를 생성합니다 vga.edid
. 16진수 덤프 출력의 마지막 줄은 모니터의 모델 번호를 나타냅니다.
$xxdvga.edid [...다른 것들...] 00000070: 0044 454c 2031 3930 3846 5042 4c4b 00ad.DEL 1908FPBLK..
그래서 모니터는 Dell 1908FP(검은색 케이스)입니다.
FWIW, 위에 표시된 edid-decode 명령줄은 모니터 제조업체에 대한 이 정보도 표시합니다.
제조업체: DEL 모델 4047 일련 번호 xxxxxxxxx
(참고: 일련 번호 값을 흐리게 했습니다.) 주위를 둘러봤지만 정수 값 4047을 특정 Dell 모니터 제품에 매핑하는 조회 테이블을 온라인에서 찾을 수 없습니다.
두 개의 서로 다른 Dell 모니터(둘 다 구형 모델)에서 이 작업을 시도했는데 두 모델 모두에 대해 올바른 Dell 모델 번호가 생성되었습니다.