Cách sử dụng / dev / fb0 làm bàn điều khiển từ không gian người dùng hoặc xuất văn bản cho nó


24

Vì vậy, tôi có một mô hình Palm Pre (P100EWW gốc) mà tôi đã bật chế độ nhà phát triển và cài đặt chroot Debian Squeeze. Công trình tuyệt vời. Tôi có kế hoạch sử dụng cái này cho MỌI THỨ (bittorrent ngang hàng, máy chủ web) nhưng điện thoại.

Tôi nhận thấy nếu tôi thực hiện cat /dev/urandom > /dev/fb0nó thực sự ghi các pixel ngẫu nhiên lên màn hình cho đến khi No space left on devicexảy ra lỗi. Tuyệt vời, bây giờ tôi có thể sử dụng màn hình.

Vì vậy, loại sử dụng nào sẽ có A) cho phép tôi sử dụng / dev / fb0 làm bàn điều khiển Tôi có thể xuất văn bản sang hoặc B) kết xuất văn bản trên / dev / fb0 từ dòng lệnh.

Tôi chưa biết về việc biên dịch lại kernel cho điều này (tôi muốn loại bỏ hoàn toàn WebOS và biến nó thành một máy chủ ARM tối thiểu) để các công cụ không gian người dùng nếu chúng tồn tại là những gì tôi đang hỏi. Cũng muốn kết xuất trực tiếp tới / dev / fb0 và không sử dụng X.


Các bảng điều khiển ảo Linux nên hoạt động trên trình điều khiển bộ đệm khung. Bảng điều khiển ảo là một công cụ mạnh mẽ; kể từ Linux 2.6, họ cho phép đặt các phông chữ khác nhau cho mỗi bảng điều khiển. Nhưng chúng được điều khiển (từ không gian người dùng) thông qua / dev / vcs  n và / dev / vcsa  n , không phải / dev / fb0.
Incni Mrsi

Câu trả lời:


11

Để sử dụng bộ đệm khung làm bàn điều khiển, bạn cần fbdevmô-đun. Bạn có thể phải biên dịch lại kernel của bạn.

Bạn cũng có thể quan tâm đến dự án DirectFB, đây là một thư viện giúp việc sử dụng bộ đệm khung dễ dàng hơn. Ngoài ra còn có các ứng dụng và môi trường GUI được viết cho nó.


1
Hình như khi tôi cài đặt Directfb ( webos-i INTERNals.org/wiki/Directfb ), nó đi kèm với một tiện ích gọi là dfbgcho phép tôi đặt một hình ảnh trên đó (và không xóa nó khi hoàn thành như thế nào fbi). Tôi biết tôi có thể tìm thấy một tiện ích để tạo .png hoặc tương tự từ một văn bản khối để nó có thể hoạt động ...
LawrenceC

24

Một số người đã trả lời các phần câu hỏi của bạn liên quan đến kernel và đưa hình ảnh (chứ không phải văn bản) lên bộ đệm khung, nhưng cho đến nay phần còn lại vẫn chưa được giải quyết. Có, bạn có thể sử dụng hệ thống con thiết bị đầu cuối ảo kernel để tạo ra cái gọi là bảng điều khiển bộ đệm khung . Nhưng có một số công cụ cho phép bạn sử dụng thiết bị bộ đệm khung để tạo các thiết bị đầu cuối ảo không gian người dùng . Bao gồm các:

  • zhcon ( Debian ) - một thiết bị đầu cuối ảo không gian người dùng hướng đến việc xử lý I / O của CJK tốt hơn nhiều so với hệ thống con kernel. Sức mạnh đặc biệt của nó là trong việc xử lý các bảng mã ISO 2022 không UTF; điểm yếu đặc biệt của nó là mã hóa UTF.
  • fbterm ( Debian ) - một thiết bị đầu cuối ảo không gian người dùng đã sinh ra một số nhánh bao gồm jfbterm . Nó có một loạt các trình cắm thêm phương thức nhập vào CJK.
  • bogl-bterm ( Debian ) - một thiết bị đầu cuối ảo không gian người dùng đã sinh ra các nhánh như niterm .
  • Ali Gholami Rudi của fbpad - một không gian người dùng tối giản thiết bị đầu cuối ảo mà không có người phụ thuộc vào thư viện X.
  • Các công cụ console-terminal-emulatorconsole-fb-realizercông cụ trong nosh - một thiết bị đầu cuối ảo không gian người dùng nhằm sao chép các thiết bị đầu cuối ảo nhân Linux và FreeBSD / PC-BSD. Nó cũng không có phụ thuộc vào các thư viện X.
  • kmscon - một thiết bị đầu cuối ảo không gian người dùng được liên kết chặt chẽ với logindmáy chủ trong systemd và các khái niệm về "chỗ ngồi" của nó.

Ali Gholami Rudi nói riêng đã sản xuất nhiều hơn là một trình giả lập thiết bị đầu cuối cho công việc bộ đệm khung. Ông cũng đã viết một trình xem PDF trực tiếp tới bộ đệm, trình xem VNC, trình phát phương tiện và trình đọc Kinh Qur'an.

Một so sánh đầy đủ bên cạnh nằm ngoài phạm vi của câu trả lời này; nhưng đây là một số điểm có liên quan đến câu hỏi:

  • Như đã lưu ý, một số chương trình thiết bị đầu cuối ảo không gian người dùng sử dụng các thư viện X để xử lý phông chữ, ánh xạ bàn phím, phương thức nhập CJK, v.v. Họ không phải là khách hàng X, nhưng họ có sự phụ thuộc từ các thư viện X. fbpadvà các công cụ nosh theo thiết kế không sử dụng bất kỳ thư viện X nào.
  • Các chương trình sử dụng thư viện X để xử lý phông chữ dĩ nhiên sử dụng phông chữ X. Những người khác thực hiện các sắp xếp khác.
    • bogl-bterm và fbpad đều có định dạng phông chữ riêng. Người ta chuyển đổi phông chữ BDF thành phông chữ BOGL bằng bdftoboglcông cụ; và người ta chuyển đổi TTF thành phông chữ "tinyfont" được fbpad sử dụng với công cụ ft2tf ( Arch ).
    • Công console-fb-realizercụ nosh sử dụng các phông chữ "vt" giống như hệ thống con thiết bị đầu cuối ảo FreeBSD 10.1 mới , và do đó chia sẻ công cụ xử lý phông chữ FreeBSD vtfontcvtđể chuyển đổi phông chữ BDF.
  • Các chương trình sử dụng thư viện X sử dụng ánh xạ bàn phím X. Đối với những người khác:
    • Các công cụ nosh có định dạng bản đồ bàn phím riêng, nhằm cung cấp bàn phím có khả năng ISO 9995-3 đầy đủ với nhóm "chung" ISO 2. Người ta chuyển đổi các tệp kbdmap BSD sang định dạng này bằng console-convert-kbdmapcông cụ. Một lần nữa, các tệp kbdmap này là các tệp được sử dụng với hệ thống con vt FreeBSD / PC-BSD .
    • fbpad hoàn toàn không thực hiện ánh xạ bàn phím của riêng mình và phụ thuộc vào sự hiện diện của hệ thống con thiết bị đầu cuối ảo kernel và cơ chế ánh xạ bàn phím của nó cho điều đó.
  • Có một số phương sai trong việc gọi và các đặc quyền bắt buộc:
    • zhcon, fbterm, bogl-bterm, fbpad và kmscon hoạt động trên cơ sở trình giả lập thiết bị đầu cuối sinh ra chương trình shell / đăng nhập trên thiết bị đầu cuối, như một quá trình con. Họ cần đặc quyền siêu người dùng để sinh sản login.
    • Các công cụ nosh được thiết kế để tích hợp với /etc/ttys(BSD), /etc/inittab(hệ thống Linux 5 init) hiện có hoặc hệ thống khác mà chúng rời khỏi công việc sinh ra getty / login / shell. console-fb-realizerchỉ cần có đủ đặc quyền để mở bộ đệm khung và các thiết bị sự kiện đầu vào, không cần đặc quyền siêu người dùng, và để truy cập vào các tệp FIFO và các tệp thông thường được duy trì console-terminal-emulator, do đó không cần bất kỳ đặc quyền đặc biệt nào.

Tất cả đều là trình giả lập thiết bị đầu cuối tất nhiên. Nếu bạn muốn đưa phần mô phỏng đầu cuối ra và đưa văn bản lên bộ đệm khung trực tiếp hơn, bạn có một số lựa chọn:

  • bogl-bterm tất nhiên dựa trên Thư viện đồ họa riêng của Ben Pfaff, thư viện I / O bộ đệm khung được thiết kế để sử dụng trong môi trường thiết lập / cứu hộ hệ thống (và "cho GUI trong PDA" ). Tất nhiên bạn có thể viết chương trình sử dụng trực tiếp.
  • Đối với một ngôi nhà nửa chừng giữa việc viết một chương trình sử dụng thư viện bộ đệm khung để thực hiện kết xuất của riêng nó và một chương trình tạo ra các chuỗi thoát cho cái mà nó nghĩ là một thiết bị đầu cuối: Thiết bị đầu cuối ảo không gian người dùng nosh được mô đun hóa và tách ra thành mảnh thành phần. Một cách đơn giản là không thể sử dụng console-terminal-emulator.

    console-fb-realizersử dụng tệp hiển thị với mảng ô ký tự, giống như /dev/vcsa*một tệp thông thường (không phải tệp thiết bị đặc biệt ký tự) và với các điểm mã Unicode, thuộc tính ECMA-48 và màu RGB 24 bit. Vì vậy, người ta có thể chạy nó lên và chỉ cần viết ký tự + thuộc tính + màu trực tiếp vào tệp mảng ô ký tự, cho phép console-fb-realizerhiển thị phông chữ cho bộ đệm khung.

    Bên cạnh: Quan sát rằng điều này ngược lại với việc tích hợp với BRLTTY , sử dụng console-terminal-emulatornhưng không chạy console-fb-realizer.


1
Đây là một câu trả lời tuyệt vời. Các thư viện Khai sáng yêu cầu hỗ trợ bộ đệm khung trên linux fbcon- tùy thuộc vào các tùy chọn thời gian biên dịch . Điều này cũng đúng với thuật ngữ giả lập thiết bị đầu cuối phụ thuộc của họ Thuật ngữ : Hoạt động trực tiếp trong bộ đệm khung linux (fbcon) . Khác hơn terminology, tôi thứ hai kmscon (và các công việc khác của David Herrmann của) giới thiệu bản thân mình .
mikeerv

1
Rudi là bậc thầy của bộ đệm khung! Một ngày nào đó tôi cũng sẽ bỏ X11.
Ciro Santilli 心 心 事件

10

Nếu bạn có thể cat /dev/urandom > /dev/fb0và nhận pixel ngẫu nhiên trên màn hình, bạn có tất cả những gì bạn cần.

Trong trường hợp của tôi, tôi cần phải bỏ một số thông tin văn bản. Tôi đã thử nghiệm điều này trong busybox và raspi, vì vậy nó có thể phù hợp với bạn. Câu trả lời có thể hơi dài một chút, vì nếu bạn không sử dụng một số bàn điều khiển, bạn sẽ cần phải tự in các pixel của ký tự. May mắn thay, ai đó đã làm công việc khó khăn, vì vậy chúng ta chỉ cần kết hợp nó.

Trong busybox hoặc trong raspi của bạn, bạn nên có một fbsetnhị phân. Điều này có thể giúp bạn tìm ra các cài đặt của bạn dưới dạng kích thước màn hình.

Trong nhúng của tôi trông như thế này:

# fbset

mode "480x272-1"
    # D: 0.104 MHz, H: 0.207 kHz, V: 0.657 Hz
    geometry 480 272 480 272 16
    timings 9600000 3 3 0 32 17 11
    accel false
    rgba 5/0,6/5,5/11,0/0
endmode

Phần quan trọng ở đây là chiều rộng 480 và chiều cao 272 pixel.

Như bạn đã đề cập, bạn có thể hoàn thành màn hình với cat /dev/urandom > /dev/fb0

và bạn có thể xóa nó với cat /dev/zeros > /dev/fb0

Hơn xóa màn hình của bạn, chúng tôi phải đảm bảo bạn có được kích thước chính xác.

Tình cờ, hộp bận rộn của tôi có tệp nhị phân fbsplash nhận đầu vào là tệp .ppm.

Đúng nếu tôi sai, nhưng có vẻ như fb0chấp nhận định dạng này. Nhìn vào Portable Anymap trên Wikipedia , có một số "biểu mẫu con" ... fbsplash sử dụng một cái lạ mắt với màu sắc, v.v ... nhưng chúng tôi muốn có thể in một cái gì đó có thể đọc được. Hãy sử dụng P1 được mã hóa trong ASCII vì mục đích đơn giản. Nếu chúng ta có thể in một đường thẳng đứng, chúng ta sẽ biết kích thước của mình là chính xác. Hãy thử nó:

Một đường thẳng đứng trong loại ppm P1 sẽ trông như thế này:

P1
480 272
f 0 0 0 0 ... 0 
f 0 0 0 0 ... 0
... 
f 0 0 0 0 ... 0

Vì vậy, sẽ có 272 dòng, 959 ký tự rộng. Tài liệu nói rằng nó phải là 1 thay vì f ... trên busybox và raspi f sáng hơn.

Điều quan trọng là bạn không có khoảng trống sau 0 ... Nhiệm vụ này có thể hơi tẻ nhạt ... tốt hơn bạn nên sử dụng trình soạn thảo văn bản giúp bạn. Trong vim, bạn có thể sao chép hai dòng đầu tiên, chuyển sang chế độ lệnh (esc), hơn là gõ các ký tự sau:

of(esc)479a 0(esc)yy271p

Tất nhiên, tôi đang sử dụng kích thước của tôi, bạn nên sử dụng kích thước của tôi. Cat tập tin này /dev/fb0, nó sẽ trông giống như: Màn hình dọc

Ok, tôi đang lừa dối ... nó không chỉ là một dòng ở đó ... khoảng 8 ... nhưng khi nó không hoạt động (chúng tôi có kích thước sai hoặc chúng tôi có không gian ở cuối, chỉ có một dòng là nhiều dễ dàng hơn).

Nếu bạn đã đi xa đến thế, chúng ta chỉ cần in đúng pixel để xem dưới dạng ký tự. Nhờ Marcel Sondaar và repo của anh ấy trên GitHub, chúng tôi sẽ không cần phải vẽ từng char.

Với một tinh chỉnh nhỏ, người ta mở rộng chương trình đơn giản của mình để in fthay vì X0thay vào khoảng trắng, chèn khoảng trắng giữa mỗi char, thêm tiêu đề và chúng ta có tệp .ppm với chữ cái tương ứng với mã charcode của nó.

Một bước nhỏ nữa và bạn không nhận được char làm đầu vào, mà là một dòng. Cat một tập tin, đường ống đến chương trình của bạn và xuất ra /dev/fb0và bạn nhận được một đầu ra văn bản:

Ví dụ về đầu ra văn bản

Tôi cũng thử nghiệm giải pháp này trên một quả mâm xôi pi và nó đã hoạt động. Hệ thống cho tôi biết tôi không có danh tiếng để đăng nhiều hơn 2 liên kết. Cho đến khi tôi nhận được điều này, bạn phải dựa vào từ của tôi: D


2

Đối với phía bảng điều khiển, bạn có thể lặp lại nội dung /dev/consolehoặc bạn có thể sử dụng nhật ký hệ thống và tùy thuộc vào nhiều cài đặt khác, nó có thể hiển thị trên bảng điều khiển.

Đối với hình ảnh, tôi chỉ thử chuyển một tập tin bmp sang fb0 và nó thực sự hoạt động! (sortof - nhiều bản sao, kích thước nhỏ hơn)

Tôi tìm thấy một chương trình bmp-to-framebuffer ở đây . Đó phải là một ví dụ hoàn hảo về định dạng mà fb0 đang mong đợi. Ngoài ra còn có fbimột chương trình để ghi trực tiếp vào bộ đệm khung.


fbicho phép tôi đặt một hình ảnh trên màn hình, điều này rất hữu ích, nhưng nó sẽ xóa bộ đệm khung khi nó thoát.
LawrenceC

0

Đó là một bài viết cũ nhưng tôi hiểu bình thường bạn cần bảng điều khiển bộ đệm khung (fbcon) để chạy bảng điều khiển trên bộ đệm khung. Đó là trong cấu hình. (trình điều khiển thiết bị / đồ họa / màn hình điều khiển ..)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.