사용자 공간에서 콘솔로 / dev / fb0을 사용하거나 텍스트를 출력하는 방법


24

그래서 개발자 모드를 활성화하고 Debian Squeeze chroot를 설치 한 Palm Pre (원래 P100EWW) 모델이 있습니다. 잘 작동합니다. 나는 이것을 ANYTHING (bittorrent peer, web server) 대신 전화로 사용할 계획입니다.

내가 cat /dev/urandom > /dev/fb0하면 No space left on device오류가 발생할 때까지 실제로 화면에 임의의 픽셀을 씁니다 . 이제 디스플레이를 사용할 수 있습니다.

따라서 어떤 종류의 유틸리티가 있습니까? A) 텍스트를 출력 할 수있는 콘솔로 / dev / fb0을 사용하도록하거나 B) 명령 줄에서 / dev / fb0에 텍스트를 렌더링합니다.

나는 아직 커널을 다시 컴파일하는 것에 대해 모른다. (WebOS를 완전히 없애고 이것을 최소한의 ARM 서버로 바꾸고 싶다.) 사용자 공간 도구가 있다면 내가 묻는 것이다. 또한 X를 사용하지 않고 / dev / fb0에 직접 렌더링하는 것을 선호합니다.


Linux 가상 콘솔은 프레임 버퍼 드라이버를 통해 작동해야합니다. 가상 콘솔은 강력한 도구입니다. Linux 2.6부터 각 콘솔마다 다른 글꼴을 설정할 수 있습니다. 그러나 / dev / fb0이 아닌 / dev / vcs n 및 / dev / vcsa  n을 통해 (사용자 공간에서) 제어  됩니다.
Incnis Mrsi

답변:


11

프레임 버퍼를 콘솔로 사용하려면 fbdev모듈 이 필요합니다 . 커널을 다시 컴파일해야 할 수도 있습니다.

프레임 버퍼를보다 쉽게 ​​사용할 수있는 라이브러리 인 DirectFB 프로젝트에 관심이있을 수도 있습니다. 이미 작성된 애플리케이션 및 GUI 환경도 있습니다.


1
Directfb ( webos-internals.org/wiki/Directfb )를 설치했을 때 , 여기 dfbg에 그림을 넣을 수 있는 유틸리티가 포함되어 있습니다 (완료시 그림을 제거하지 마십시오 fbi). 블록 텍스트에서 .png 또는 유사한 파일을 작성하는 유틸리티를 찾을 수 있으므로 이것이 작동 할 수도 있습니다.
LawrenceC

24

여러 사람들이 커널을 다루고 텍스트 대신 이미지를 프레임 버퍼에 넣는 귀하의 질문 부분에 대답 했지만 지금까지 나머지는 주소 지정되지 않았습니다. 예, 커널 가상 터미널 서브 시스템을 사용하여 소위 프레임 버퍼 콘솔 을 만들 수 있습니다. 그러나 프레임 버퍼 장치를 사용하여 사용자 공간 가상 터미널 을 만들 수있는 몇 가지 도구가 있습니다 . 여기에는 다음이 포함됩니다.

  • zhcon ( Debian ) — 커널 하위 시스템보다 CJK I / O를 훨씬 잘 처리하는 사용자 공간 가상 터미널입니다. ISO 2022 비 UTF 인코딩을 처리하는 데있어 특별한 장점이 있습니다. 특별한 약점은 UTF 인코딩입니다.
  • fbterm ( Debian ) — jfbterm을 포함하여 여러 개의 포크를 생성 한 사용자 공간 가상 터미널입니다 . CJK 입력 방법 플러그인이 많이 있습니다.
  • bogl-bterm ( Debian ) — niterm 과 같은 포크를 생성 한 사용자 공간 가상 터미널입니다 .
  • Ali Gholami Rudi의 fbpad -X 라이브러리에 의존하지 않는 최소 사용자 공간 가상 터미널입니다.
  • noshconsole-terminal-emulatorconsole-fb-realizer도구 -Linux 및 FreeBSD / PC-BSD 커널 가상 터미널 복제를 목표로하는 사용자 공간 가상 터미널입니다. X 라이브러리에도 의존하지 않습니다.
  • kmscon시스템화logind서버와 "시트"개념으로 밀접하게 연결된 사용자 공간 가상 터미널입니다 .

Ali Gholami Rudi는 특히 프레임 버퍼 작업을위한 터미널 에뮬레이터 그 이상을 생산했습니다. 또한 직접 프레임 버퍼 버퍼 PDF 뷰어, VNC 뷰어, 미디어 플레이어 및 Quran 리더를 작성했습니다.

이 답변의 범위를 완전히 나란히 비교하지는 않습니다. 그러나 다음은 질문과 관련된 몇 가지 사항입니다.

  • 언급 한 바와 같이, 여러 사용자 공간 가상 터미널 프로그램은 글꼴 처리, 키보드 매핑, CJK 입력 방법 등에 X 라이브러리를 사용합니다. X 클라이언트는 아니지만 X 라이브러리의 종속성이 있습니다. fbpad설계 상 nosh 도구는 X 라이브러리를 사용하지 않습니다.
  • 글꼴 처리에 X 라이브러리를 사용하는 프로그램은 물론 X 글꼴을 사용합니다. 다른 사람들은 다른 준비를합니다.
    • bogl-bterm 및 fbpad에는 고유 한 고유 한 글꼴 형식이 있습니다. 하나는 bdftobogl도구를 사용하여 BDF 글꼴을 BOGL 글꼴로 변환합니다 . 그리고 하나는 TTF를 ft2tf ( Arch ) 도구 로 fbpad에서 사용하는 "작은 글꼴"글꼴로 변환 합니다.
    • nosh console-fb-realizer도구는 새로운 FreeBSD 10.1 커널 가상 터미널 서브 시스템 과 동일한 "vt"글꼴을 사용 하므로 vtfontcvtBDF 글꼴을 변환하기위한 FreeBSD 글꼴 조작 도구 를 공유합니다 .
  • X 라이브러리를 사용하는 프로그램은 X 키보드 매핑을 사용합니다. 다른 사람에 관해서는 :
    • nosh 도구에는 ISO "공통"그룹 2를 갖춘 완전한 ISO 9995-3 가능 키보드를 제공하기위한 고유 한 고유 한 키보드 맵 형식이 console-convert-kbdmap있습니다. 도구를 사용하여 BSD kbdmap 파일을이 형식으로 변환합니다 . 이 kbdmap 파일은 FreeBSD / PC-BSD vt 하위 시스템과 함께 사용되는 파일 입니다.
    • fbpad는 자체 키보드 매핑을 전혀하지 않으며 커널 가상 터미널 하위 시스템의 존재와이를위한 키보드 매핑 메커니즘에 의존합니다.
  • 호출 및 필요한 특권에 약간의 차이가 있습니다.
    • zhcon, fbterm, bogl-bterm, fbpad 및 kmscon은 터미널 에뮬레이터가 자식 프로세스로 터미널에서 직접 쉘 / 로그인 프로그램을 생성한다는 점에서 작동합니다. 스폰하려면 수퍼 유저 권한이 필요합니다 login.
    • nosh 도구는 기존 /etc/ttys(BSD), /etc/inittab(Linux 시스템 5 init) 또는 기타 시스템 과 통합되도록 설계되어 getty / login / shell을 생성하는 작업을 수행하지 않습니다. console-fb-realizer수퍼 유저 권한이 아닌 프레임 버퍼 및 입력 이벤트 장치를 열고에 의해 유지 관리되는 FIFO 및 일반 파일에 액세스하기에 충분한 권한 만 console-terminal-emulator있으면되므로 특별한 권한이 전혀 필요하지 않습니다.

이것들은 모두 터미널 에뮬레이터 입니다. 터미널 에뮬레이션을 꺼내고 프레임 버퍼에 더 직접 텍스트를 넣으려면 몇 가지 선택 사항이 있습니다.

  • bogl-bterm은 물론 Ben Pfaff의 Ben 's Own Graphics Library를 기반으로 시스템 설정 / 구조 환경에서 사용하도록 설계된 프레임 버퍼 I / O 라이브러리 (및 "PDA의 GUI" )를 기반으로합니다. 물론 직접 사용하는 프로그램을 작성할 수 있습니다.
  • 프레임 버퍼 라이브러리를 사용하여 자체 렌더링을 수행하는 프로그램과 이스케이프 시퀀스를 터미널로 생각하는 프로그램을 작성하는 중간 단계의 경우 : nosh 사용자 공간 가상 터미널은 모듈 식이며 분리되어 있습니다. 구성 요소 조각. 하나는 단순히 사용할 수 없습니다 console-terminal-emulator.

    console-fb-realizer/dev/vcsa*일반 파일 (문자 특수 장치 파일이 아님)과 같은 문자 셀 배열 과 유니 코드 코드 포인트, ECMA-48 속성 및 24 비트 RGB 색상이있는 표시 파일을 사용합니다. 따라서 그것을 실행하고 문자 + 속성 + 색상을 문자 셀 배열 파일에 직접 쓸 console-fb-realizer수 있으므로 글꼴을 프레임 버퍼에 렌더링 할 수 있습니다.

    제쳐두고 : 이것이 사용 하지만 실행되지 않는 BRLTTY와의 통합과 반대되는 것을 관찰하십시오 .console-terminal-emulatorconsole-fb-realizer


1
이것은 놀라운 답변입니다. Enlightenment 라이브러리 fbcon컴파일 타임 옵션 에 따라 Linux에서 프레임 버퍼 지원을 요구 합니다. 이는 종속 터미널 에뮬레이터 용어 에도 적용됩니다 . 용어 : Linux 프레임 버퍼 (fbcon)에서 직접 작동합니다 . 이외에 terminology, 나는 kmscon (그리고 David Herrmann 's의 다른 작품들) 추천을 두 번째로 생각한다 .
mikeserv

1
Rudi는 프레임 버퍼의 마스터입니다! 어느 날 나는 X11도 버릴 것이다.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

10

/dev/urandom > /dev/fb0화면에서 고양이 를보고 임의의 픽셀을 얻을 수 있으면 필요한 모든 것이 있습니다.

내 경우에는 텍스트 정보를 덤프해야했습니다. 나는 이것을 busybox와 raspi에서 테스트 했으므로 당신에게 도움이 될 수 있습니다. 콘솔을 사용하지 않으면 문자의 픽셀을 직접 인쇄해야하기 때문에 대답이 약간 길 수 있습니다. 운 좋게 누군가가 열심히 일 했으므로 우리는 그것을 결합해야합니다.

busybox 또는 raspi에 fbset바이너리 가 있어야합니다 . 이렇게하면 설정을 화면 크기로 찾는 데 도움이 될 수 있습니다.

내 임베디드에서 다음과 같이 보입니다.

# 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

여기서 중요한 부분은 너비 480과 높이 272 픽셀입니다.

당신이 언급했듯이, 당신은 화면을 수행 할 수 있습니다 cat /dev/urandom > /dev/fb0

그리고 당신은 그것을 지울 수 있습니다 cat /dev/zeros > /dev/fb0

화면을 비우는 것보다 치수를 올바르게 확보해야합니다.

우연히도 busybox는 .ppm 파일로 입력되는 fbsplash 바이너리를 가지고있었습니다.

내가 틀렸다면 맞지만 fb0이 형식 을 받아들이는 것 같습니다 . Wikipedia의 Portable Anymap을 살펴보면 몇 가지 "서브 포맷"이 있습니다 ... fbsplash는 색상이있는 멋진 것을 사용합니다. 그러나 우리는 읽을 수있는 것을 인쇄 할 수 있기를 원합니다. 단순성을 위해 ASCII로 코딩 된 P1을 사용합시다. 세로선을 인쇄 할 수 있으면 치수가 올바른 것입니다. 해 봅시다:

ppm 유형 P1의 세로선은 다음과 같아야합니다.

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

따라서 272 줄, 959 자입니다. 문서에 따르면 busybox에서 f ... 대신 1이어야하고 raspi f는 더 밝았습니다.

0 뒤에 공백이없는 것이 중요합니다 ...이 작업은 약간 지루할 수 있습니다 ... 텍스트 편집기를 사용하는 것이 좋습니다. vim에서는 처음 두 줄을 복사하여 다음 문자를 입력하는 것보다 명령 모드 (esc)로 이동할 수 있습니다.

of(esc)479a 0(esc)yy271p

물론, 나는 내 치수를 사용하고 있습니다. 이 파일을 /dev/fb0에 배치하면 다음과 같아야합니다. 세로선 화면

좋아, 속임수입니다 ... 그것은 단지 한 줄이 아닙니다 ... 그것은 약 8입니다 ...하지만 그것이 작동하지 않을 때 (우리는 잘못된 치수를 가지고 있거나 끝에 공간이 있습니다. 한 줄만 있으면됩니다. 쉽게).

당신이 그것을 멀리 가지고 있다면, 우리는 문자로 볼 수있는 올바른 픽셀을 인쇄해야합니다. Marcel Sondaar와 GitHub의 그의 repo 덕분에 우리는 각 문자를 그릴 필요가 없습니다.

작은 팅겨 하나와 함께 인쇄 할 그의 간단한 프로그램을 확장 f하는 대신 X하고 0, 각 문자 사이에 공백 삽입하는 대신 공간의 헤더를 추가하고 우리는 charCode 값을 해당하는 문자와 .ppm 파일이 있습니다.

한 걸음 더 나아가서 문자를 입력으로 얻지 않고 줄을 얻습니다. 파일을 정리하고 프로그램으로 파이프하고 출력 /dev/fb0하면 텍스트 출력이 나타납니다.

텍스트 출력의 예

나는이 솔루션을 라즈베리 파이에서도 테스트했으며 효과가있었습니다. 시스템에 2 개 이상의 링크를 게시 한 것으로 평판이 없다고 알려줍니다. 내가 이것을 얻을 때까지, 당신은 내 말에 의지해야합니다 : D


2

콘솔 쪽의 경우 내용을 반향 /dev/console하거나 syslog를 사용할 수 있으며 다양한 다른 설정에 따라 콘솔에 표시 될 수 있습니다.

이미지의 경우, 방금 bmp 파일을 fb0로 캐터링하려고 시도했지만 실제로 작동했습니다! (정렬-여러 사본, 작은 크기)

bmp-to-framebuffer 프로그램을 찾았 습니다 . 이것은 fb0이 기대하는 형식의 완벽한 예입니다. 또한 fbi프레임 버퍼에 직접 쓰는 프로그램 도 있습니다 .


fbi화면에 그림을 넣을 수있어 유용하지만, 일단 종료되면 프레임 버퍼를 지 웁니다.
LawrenceC

0

오래된 게시물이지만 일반적으로 프레임 버퍼에서 콘솔을 실행하려면 프레임 버퍼 콘솔 (fbcon)이 필요하다는 것을 알고 있습니다. 구성 중입니다. (장치 드라이버 / 그래픽 / 콘솔 디스플레이 ..)

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