Linux 텍스트 콘솔 스크롤 속도 변경 - 재부팅 필요 없음

Linux 텍스트 콘솔 스크롤 속도 변경 - 재부팅 필요 없음

다시 시작하지 않고 텍스트 콘솔 스크롤 속도를 변경하는 방법이 있습니까? 현재 Fedora를 사용하고 있지만 배포판과 관련이 없는 답변에 감사드립니다.

https://www.kernel.org/doc/Documentation/fb/vesafb.txt

커널을 재부팅하지 않고 위에 문서화된 vesafb 커널 매개변수와 함께 "ywrap"을 사용하고 싶습니다.

답변1

stty관련이 없습니다.

회선 규율을 통해 설정된 하드웨어 회선 속도가 0이 아닌 경우 가상 터미널에는 의미가 없습니다. 이는 직렬 장치 회선 속도를 제어하므로 실제 직렬 장치에 의해 형성된 "터미널"에만 의미가 있습니다. 커널에 내장된 터미널 에뮬레이터는 직렬 장치를 처리하지 않습니다.

ywrap만병통치약은 아닙니다.

터미널 에뮬레이터 가 지원하는 디스플레이 하드웨어와 같은 메커니즘은 ywrap(거의) 전체 높이 전체 줄 너비 스크롤 기능을 갖춘 터미널 에뮬레이터에만 도움이 될 수 있습니다.

분명한 이유로 터미널 에뮬레이터는 이러한 하드웨어 메커니즘을 활용할 수 없습니다.별말씀을요왼쪽 및 오른쪽 여백을 지원하는 경우 스크롤 작업은 전체 줄 너비를 스크롤하지 않습니다. 그러나 Linux 커널에 내장된 터미널 에뮬레이터는 처음부터 DECSLRM("DEC Set Left and Right Margins") 제어 시퀀스(또는 이와 유사한 것)를 지원하지 않으므로 여기서 부분 행 스크롤은 문제가 되지 않습니다.

그러나 높이 스크롤의 일부입니다. Linux 커널의 내장 터미널 에뮬레이터하다애플리케이션이 스크롤에 참여할 화면의 첫 번째 줄과 마지막 줄을 설정할 수 있도록 하는 DECSTBM("DEC Set Top and Bottom Margins") 제어 시퀀스를 지원합니다. 그리고 이 제어 시퀀스는 terminfo 항목 change_scroll_region의 함수 로 올바르게 나열됩니다 linux. 이와 같은 것을 사용하십시오스크롤 영역실제로 전체 화면 TUI 애플리케이션에서는 매우 일반적입니다. vim예를 들어, 전체 너비 창을 스크롤할 때 사용합니다.

Linux 커널용 드라이버는 fbcon스크롤 작업이 전체 화면 이미지의 3/4 이상을 유지하고 이동할 때만 이 메커니즘을 사용합니다. ywrap이는 부분 높이 스크롤을 사용하면 ywrap일부 복사도 포함되므로 화면의 "스크롤되지 않은" 부분은 하드웨어가 스크롤하더라도 동일한 위치에 남아 있는 것처럼 보이기 때문입니다.모두화면. 스크롤 영역이 작을수록 ywrap디스플레이의 일부가 스크롤되지 않는 것처럼 보이게 하기 위해 수행해야 하는 복사량이 많아지기 때문에 유용성이 떨어집니다.

제어 시퀀스는 지원되지 않습니다.

가상 터미널과 달리 실제 터미널에는 스크롤 속도를 선택할 수 있는 제어 시퀀스가 ​​있는 경우가 있습니다. 예: DEC VT 시리즈에는 DECSCLM("DEC Rolling Mode", DEC Special Mode Flag #4)이라는 플래그가 있습니다. (ECMA-48 RM 제어 시퀀스를 통해) 재설정되면 터미널은 가능한 한 빨리 스크롤됩니다. 설정된 경우(ECMA-48 SM 제어 시퀀스를 통해) 터미널이 더 느리게 스크롤되어 스크롤하는 동안 지연이 삽입됩니다.

Linux 커널에 내장된 터미널 에뮬레이터가 전체 DEC VT 에뮬레이션인 경우 이것이 스크롤 속도를 제어하는 ​​방법입니다. 그러나 그것은 진실이 아니다. 일부 사용자 공간 터미널 에뮬레이터는 xterm이 모드 플래그를 구현하기를 좋아하지만 이를 수행하는 커널 터미널 에뮬레이터는 없는 것으로 알고 있습니다. Linux 커널에 내장된 터미널 에뮬레이터는 확실히 그렇지 않습니다.

답변2

VT 하위 시스템에 Linux 커널 프레임 버퍼 드라이버 모듈 사용을 중지하도록 지시하면 재부팅하지 않고도 제거할 수 있습니다(참조:문서/콘솔/console.txt세부):

# tl;dr
reload_fb() {
  echo 0 > /sys/devices/virtual/vtconsole/vtcon1/bind
  rmmod uvesafb
  modprobe uvesafb scroll=ywrap
}
reload_fb

경고하다:vtcon0이 더미 드라이버(EFI와 같은)이거나 버그가 있는 경우(BIOS 펌웨어에는 버그가 있는 경향이 있음) 작동하는 fb 드라이버를 재부팅하거나 로드할 때까지 작동하는 콘솔 디스플레이를 얻지 못할 수 있습니다. 디스플레이만 작동을 멈춥니다. 명령을 입력할 수는 있지만 출력은 볼 수 없습니다. X11은 영향을 받지 않은 것 같습니다. 그래서,SSH를 통해 또는 동일한 시스템의 X 터미널을 통해 원격으로 로그인하는 것이 좋습니다.

노트:eyoung100에서 제안한 대로 이 드라이버를 사용하는 경우 uvesafb이 패키지도 설치해야 합니다 v86d.

로드된 모든 콘솔 드라이버를 나열할 수 있습니다:

[root@linflas ~]# cd /sys/devices/virtual/vtconsole
[root@linflas vtconsole]# grep -H "" vtcon*/[bn]*
vtcon0/bind:0
vtcon0/name:(S) dummy device
vtcon1/bind:1
vtcon1/name:(M) frame buffer device

관련 정보