Tôi đã tự hỏi nơi để đặt đoạn văn bản này. Trang web riêng là một ứng cử viên có thể, hoặc tìm một số chủ đề tại superuser.com gần nhất với chủ đề của tôi (và có thể đã giúp tôi). Đây là cách tôi đã đến đây :-)
Vấn đề cụ thể của tôi là, làm thế nào để buộc một chế độ video cụ thể vào bảng điều khiển văn bản của tôi. Thiết lập hệ thống: Debian 9 Trải dài trên phần cứng Haswell, IGP của nó được xử lý bởi trình điều khiển i915 trong Linux (hiện hỗ trợ KVM và DRI / DRM trong một thời gian dài). Một số công tắc KVM tương tự ngu ngốc, nói với PC thông qua DDC / EDID rằng độ phân giải tối đa là 1600x1200, nhưng trong thực tế, màn hình LCD có khả năng 1280x1024 :-)
Tôi bắt đầu chơi xung quanh với vbetool
và fbset
, tuy nhiên đã hết hạn / không phù hợp cho mục đích này, vì chúng không tương thích với KMS + DRM.
"Inteldrmfb" dường như chỉ là một phần nhỏ của KMS + DRM (và, dường như không được thể hiện trong một mô-đun hạt nhân của chính nó). Các tham số hình học là chỉ đọc.
Ít nhất fbset có thể hiển thị thụ động độ phân giải hoạt động, có một số giá trị thông tin.
Tuy nhiên, dường như có một cách để bạn và tôi thiết lập độ phân giải và tốc độ khung hình AKA làm mới theo chiều dọc từ dòng lệnh kernel (tham số bộ nạp khởi động trên dòng bắt đầu bằng "linux", nằm ở cuối của một hiện đại phần grub.conf đa dòng).
Bạn có thể mân mê các thông số khi khởi động, nếu bạn nhấn e
trong khi Grub đếm ngược thời gian chờ. Thực hiện theo sự giúp đỡ từ đó. Khi bạn hài lòng với các chỉnh sửa của mình, hãy nhấn Ctrl + X hoặc F10 để khởi động cấu hình đã sửa đổi. .
Để lưu trữ liên tục các tham số khởi động bổ sung của bạn (kernel cmdline args), trong Debian bạn nên nhập chúng vào /etc/default/grub
, trong một biến được gọi là GRUB_CMDLINE_LINUX_DEFAULT
. Và chạy update-grub
.
Bây giờ cho các đối số.
Trước tiên, bạn cần i915.modeset=1
(với điều kiện hệ thống con đồ họa của bạn là Intel IGP). Nếu bạn gặp phải vấn đề tương tự như tôi đã làm, tức là hạt nhân thiết lập độ phân giải quá cao, bạn có thể có chế độ = 1 đã được mặc định (được biên dịch trong kernel).
Trong khi bạn đang vật lộn với cú pháp của lời nguyền cmdline, và đôi khi bạn chỉ muốn bất kì chế độ đồ họa làm việc, bạn có thể muốn thử i915.modeset=0
. Điều đó rõ ràng ngăn chặn thay đổi chế độ đồ họa hoàn toàn và bạn còn lại một bảng điều khiển 80x25 ký tự gần như cổ điển, tất cả các cách để đăng nhập bảng điều khiển. Bạn cũng sẽ nhận thấy rằng không có / dev / fb0 và không có thông báo gỡ lỗi DRM trong dmesg (đọc để biết chi tiết).
Cũng nhớ tùy chọn quiet
. Điều này hoạt động có hoặc không có chế độ. Nó dường như ngăn chặn việc in kernel
tin nhắn đến bảng điều khiển của bạn (/ dev / tty) = bạn nhận được một màn hình tối trống
trong vài giây và sau đó bạn được chào đón với lời nhắc đăng nhập.
Đây là một mặc định trong Debian. (Trên thực tế trong Debian hiện đại với systemd,
bạn có thể nhận được thông báo khởi động systemd trên màn hình của bạn, thay vì
nhật ký nhân ...)
Vấn đề là, nếu bạn muốn thông điệp kernel trở lại, bạn chỉ nên
xóa từ "quiet" khỏi dòng lệnh kernel và sử dụng lệnh đó
chỉ cho một lần khởi động (nhấn "e" trong Grub, chỉnh sửa, ctrl + x để tiếp tục)
hoặc vĩnh viễn (chỉnh sửa / etc / default / grub & amp; & amp; update-grub).
Cuối cùng cũng đến lúc: một khi bạn có i915.modeset=1
,
bạn cũng cần thêm video=<xres>x<yres>@framerate
.
Chẳng hạn như, trong trường hợp của tôi, video=1280x1024@60
hoặc là video=1024x768@60
.
Có nhiều lựa chọn có thể hơn, xem có liên quan chương tại Arch wiki .
Ví dụ: bạn cũng có thể chỉ định độ sâu màu,
hoặc áp dụng chế độ cho chỉ một cổng đầu ra video
(được gọi là "đầu nối" trong ruột DRM).
Lưu ý rằng chế độ được chỉ định của bạn có thể cần khớp với một trong các chế độ được biết đến với kernel, tức là một trong những "mô hình EDID". Hạt nhân giữ một danh sách các khối dữ liệu này, thu được thông qua DDC từ màn hình hoặc từ / lib / firmware hoặc có thể được biên dịch trong. Tức là, bạn không thể chỉ định bất kỳ hình học lẻ nào.
Trong một số howtos, bạn sẽ tìm thấy video=<xres>x<yres>
, nhu la video=1024x768
.
Điều này không có hiệu ứng mong muốn, trong đó độ phân giải xuất hiện
về đầu ra - nhưng bạn đã để quyết định về tốc độ khung hình cho trình điều khiển,
có xu hướng chọn tốc độ khung hình cao nhất có thể (trong số "các dòng chế độ"
có sẵn trong bộ khối EDID). Chẳng hạn như, trong trường hợp của tôi, nó đã bật ra
mà người lái xe đã chọn 1024x768@85
, đó sẽ là một lựa chọn tốt trong thời đại CRT, nhưng lại nằm ngoài phạm vi của nhiều màn hình LCD ngày nay. Lưu ý rằng màn hình LCD hiện đại giá rẻ (trước FreeSync) thường có tốc độ khung hình 60 Hz, vì vậy đây là những gì bạn cần đặt rõ ràng, nếu DDC của bạn vắng mặt hoặc bonkers.
Trong quá trình tìm kiếm một số câu trả lời, tôi đã vấp phải các tài liệu tham khảo về điều này bản vá được thiết lập bởi Dave Airlie - mang lại xử lý video = cmdline arg. Nó chỉ ra rằng điều này đã được sáp nhập vào vanilla Linux vài năm trước.
Trong trường hợp của tôi, màn hình được điều khiển bởi 1600x1200 và đã báo cáo "ngoài phạm vi" vì nó không thể đối phó. Khi tôi đang thử các đối số cmdline khác nhau,
Tôi đã thử video=1024x768
, dẫn đến "ngoài phạm vi" trên màn hình.
Ở bên ngoài, bởi thông báo lỗi mơ hồ, có vẻ như cmdline arg
không có tác dụng gì cả Chỉ sau đó tôi phát hiện ra rằng tất cả những gì tôi đang thiếu là một @60
hậu tố :-)
Một chút thú vị ở đây là, làm sao Tôi phát hiện ra.
Có một cmdline kernel khác tạo ra hệ thống con DRI / DRM
in nhật ký gỡ lỗi nhiều trò chuyện hơn:
phiên bản kernel nhỏ hơn 4.1:
drm.debug=0xe
phiên bản kernel 4.1 trở lên:
drm.debug=0x1e log_buf_len=1M
( nguồn )
Tôi đang gắn một nhật ký gỡ lỗi từ máy của tôi .
Những điều cần tập trung vào (từ khóa để tìm kiếm): Kernel command line
, cmdline
, adjusted mode
, [drm:
"Tên kết nối" có thể được thu thập từ đây: ls /sys/class/drm/
và lưu ý rằng cú pháp arg = video cmdline không lấy
Tiền tố "thẻ-" mà bạn có thể thấy trong / sys / class / drm.
Cú pháp của video = và tên trình kết nối được mô tả chi tiết
trong một chương có liên quan của Arch Linux wiki .
Bây giờ hãy để tôi thay đổi bánh răng / thay đổi chủ đề một chút.
Câu hỏi ban đầu trong chủ đề này là, làm thế nào để sửa đổi hình dạng chế độ video.
Tôi đã làm điều này trước đây trong X và trong Windows (sử dụng Intel IEGD quá cố).
Trong Linux dưới kvm + drm, cách duy nhất để điều chỉnh hình học và thời gian
rõ ràng là bằng cách nộp tệp EDID của riêng bạn, mà trước tiên bạn
phải làm thủ công. Cũng gần như vậy.
Cấu trúc EDID là mô tả ngắn gọn trong một đoạn tài liệu đi kèm với nguồn nhân vanilla.
Các định nghĩa Makefile và ví dụ EDID trực tiếp trong thư mục mẹ của nó .
Chọn một số .S làm ví dụ, sao chép vào tệp của riêng bạn
(xem quy ước đặt tên trên đỉnh của Makefile),
chỉnh sửa thời gian, xây dựng nhị phân EDID của bạn và ...
hy vọng nó giải quyết vấn đề của bạn :-)
Việc tính thời gian / số pixel cần một số phép toán để làm đúng.
Và, có một số tiêu chuẩn lịch sử thay thế
bạn nên tuân thủ tốt hơn và đó là xung đột với nhau
(chúng là các giai đoạn tiến hóa của tiêu chuẩn thời gian hiển thị):
- kỷ nguyên CRT
GTF
, - kỷ nguyên LCD
DMT
hoặc là CVT
, - và sau đó
CVT-RB
(giảm trống).
Hoặc bạn có thể tính toán các số bằng tay, hoặc có một số công cụ và bảng của chế độ tiêu chuẩn.
Hãy thử googling cho "máy tính EDID" hoặc "máy tính modeline" hoặc một số thứ khác. Thậm chí còn gọn gàng
Công cụ dòng lệnh Linux cho công việc.
Xem thêm
cơ sở dữ liệu mô hình .
Vấn đề cụ thể của bạn có thể có thể được giải quyết bằng cách thay đổi
xung HSYNC ở bên phải (bạn cũng có thể thử thay đổi cực của nó),
hoặc bằng cách tạo xung đồng bộ hóa và / hoặc tổng thời gian trống
tương đối rộng hơn, hoặc (như bạn đề xuất) bằng cách giảm
độ phân giải pixel hiển thị / hiển thị (bội số của 8).
Nếu bạn làm trống rộng hơn, bạn có thể cần tăng
đồng hồ pixel, để giữ tốc độ khung hình gốc.