전체 화면 콘솔 배경 (TTY)을 어떻게 사용자 지정할 수 있습니까?


17

나는 전체 화면 콘솔 ( Ctrl+ Alt+ F1...로 열린 콘솔 F6)을 적극적으로 사용했으며 일종의 "벽지"(물론 다소 어둡고 단조로운 것으로) 장식하려고 생각합니다. 가독성을 떨어 뜨리지 않도록) 아마도 모양과 느낌이 좋을 수도 있지만 시도해야 할 수도 있습니다. 다른 그림을 다른 콘솔의 배경 ( Ctrl+ Alt+ 하나 F1, Ctrl+ Alt+ F2등) 으로 설정할 수 있다면 더 좋습니다 .

순수한 텍스트 모드가 제공하는 콘솔의 해상도가 훨씬 높기 때문에 본격적인 그래픽 모드가 사용되며 모든 것이 가능합니다. 그러나 어떻게?


2
불가능한. 가상 콘솔은 텍스트 전용입니다.
Sergiy Kolodyazhnyy

5
@Serg Linux가 존재하지 않았던 이래로 텍스트 전용 모드를 사용해 왔습니다. 실제 텍스트 모드와 그래픽 에뮬레이션을 구별 할 수 있습니다. 요즘 많은 사람들이 이것을 상상할 수는 없지만 Linux 2.4 일 동안 X 서버가 전혀 설치되지 않은 콘솔에서 영화를 보았습니다. 이것은 이것이 실제로 불가능하다는 것을 의심하게 만듭니다.
Ivan

1
좋아, 나 자신을 바로 잡자. 장치로 알려진 것이 있기 때문에 콘솔에서 이미지와 영화를 보는 것을 믿지만 framebuffer그 화면에는와 같은 일부 프로그램의 출력이 사용됩니다 fbi. TTY 자체는 여전히 텍스트 전용 장치입니다
Sergiy Kolodyazhnyy

2
자격이되면 질문에 현상금을 드리겠습니다. 실제로 관심이
생겼습니다

1
이것을 확인하십시오 : code.google.com/p/fbterm
Sergiy Kolodyazhnyy

답변:


12

Linux 콘솔 드라이버에는이 기능이 내장되어 있지 않지만이 fbterm를 수행 할 수 있는 응용 프로그램 이 있습니다. 배경 이미지를 작동 시키려면 fbi다음 과 같은 프레임 버퍼에 이미지를 표시 할 수있는 유틸리티가 필요합니다 .

sudo apt-get install fbterm fbi

fbterm실제로 배경 이미지 자체를 읽거나 표시하지 않으면 다른 프로그램이 시작하기 전에 화면에 배경 이미지를 설정해야합니다. fbterm맨 페이지 에는을 사용 하여이 작업을 수행하는 방법에 대한 지침이 있습니다.이 fbv도구는 최신 우분투 시스템에서 컴파일 할 수 없었던 절대적으로 구식이며 지원되지 않는 유틸리티입니다. fbi는 프레임 버퍼에 대해 훨씬 깨끗하고 멋진 이미지 뷰어이지만 불행히도 더 간단한 "설정 및 종료"기능이 fbv없으므로 fbterm직접 사용하려고하면 방해가 됩니다. 그러나 나는 작동하는 대안을 생각해 낼 수있었습니다.

먼저, 원하는 이미지 를 사용 fbi하고 cat표시 한 다음 "framebuffer raw format"이미지 파일로 덤프해야합니다. 루트로, 프레임 버퍼 콘솔에서 다음을 실행하십시오 :

( sleep 1; cat /dev/fb0 > nifty-background.fbimg ) & fbi -t 2 -1 --noverbose -a nifty-background.png

(이 파일에 결과를 저장하는 데, 몇 초 후 종료 이미지를 표시합니다 nifty-background.fbimg. 교체 nifty-background.fbimg하고 nifty-background.png당신은 물론, 원하는는 파일 이름을 무엇으로.)

명령의 첫 번째 부분은 1 초 동안 기다렸다가 프레임 버퍼 내용을 파일에 넣습니다. 동시에 두 번째 부분 (& 뒤)이 시작 fbi되어 이미지가 프레임 버퍼에 표시되므로 cat 명령이 실행 되려고 할 때 (1 초 후) 덤프 할 이미지가 있습니다. 그들이 순서대로 된 이유 fbi는 전경에서 실행되지 않으면 문제가 있음을 발견했기 때문 입니다. 즉, 목록의 마지막 명령이어야합니다.

그때부터 실행할 때마다 다음 fbterm과 같이 시작할 수 있습니다 (작은 래퍼 스크립트를 만들 수도 있습니다).

export FBTERM_BACKGROUND_IMAGE=1
cat nifty-background.fbimg > /dev/fb0; fbterm

7

실제 텍스트 모드와 그래픽 에뮬레이션을 구별 할 수 있습니다.

… 이것은 관찰자가 Windows의 실제 BSOD를 10 년 전 라운드를 한 농담 BSOD 화면 보호기의 동작과 구별 할 수있는 방법 중 하나입니다. 그래픽 모드에서 디스플레이 어댑터 하드웨어를 사용하여 블록 그래픽 문자를 표시하는 것은 텍스트 모드에서 디스플레이 어댑터 하드웨어가 생성 한 문자와 미묘하게 다릅니다.

예, 디스플레이 어댑터가 그래픽 모드에 있습니다. 꽤 오랫동안 이런 식으로 사용되었습니다. PC 디스플레이 어댑터 하드웨어가없는 시스템에서는 항상 이런 방식 이었습니다 . 초기 Linux의 PC 호환 콘솔에서는 콘솔에 디스플레이 어댑터 하드웨어가 텍스트 모드로 있습니다. 그러나이 사용은 거의 아무것도 조용히 침식되지 않았습니다. 오늘날 대부분의 사용자를위한 유니 코드 지원에는 텍스트 모드 하드웨어보다 더 큰 글리프 세트가 필요합니다. 머신 로더는 물론 리눅스 로더와 시스템 초기화와 같이 스플래시 화면 (예쁜 그림과 회사 로고가있는)에 그래픽 모드를 사용합니다.

리눅스 커널에는 터미널 에뮬레이터 프로그램이 내장되어 있습니다. 내부 버퍼 인터페이스를 사용하여 액세스하는 프레임 버퍼 및 입력 이벤트 하위 시스템 위에 계층화되어 있습니다. 응용 프로그램 모드 시스템에 일련의 커널 가상 터미널 장치 /dev/tty1등을 제공합니다.

이 프로그램은 일반적인 응용 프로그램으로 Linux 커널과 함께 실행되는 터미널 에뮬레이터에 비해 상당히 제한적 입니다. 실제 터미널 기능의 제한된 하위 집합 만 에뮬레이션하고 후자 터미널 에뮬레이터의 추가 기능이 없습니다.

당신이 이것을 찾아야 할 것들입니다. xterm, lxterminal, gnome-console, konsole, eterm, wterm 및 나머지와 같이 입력 / 출력에 X를 사용하는 터미널 에뮬레이터에 익숙 할 것입니다. 프레임 버퍼 장치와 입력 이벤트 장치를 사용하여 입력 / 출력하는 장치는 잘 알려져 있지 않습니다. 제공 사용자 공간 가상 단자 :

후자 중 일부는 원하는 것을 할 수 있습니다.

예를 들어 fbterm은 시작시 프레임 버퍼에있는 것을 배경 이미지로 사용하도록 구성 할 수 있습니다. 따라서 fbterm을 실행하기 전에 이미지를 Linux 프레임 버퍼 장치에 직접 표시하여 배경 이미지를 설정하는 데 필요한 다른 여러 유틸리티 중 하나를 사용하면됩니다. 다음과 같은 여러 가지 도구가 있습니다.

fbvis와 fbi는 종료시 화면을 지우고 Foogod의 답변에 자세히 설명 된 회선이 필요합니다. 그러나 dfbg는 자체적으로 정리되지 않으므로이 특정 작업에 더 적합합니다.

추가 자료


콘솔의 배경 이미지를 만드는 방법에 대한 질문이었습니다. 귀하의 답변에는 가능한 솔루션 만 나열되어 있습니다. 따라서 다른 답변에 현상금을 수여하지만 귀하가 제공 한 풍부한 정보에 감사드립니다. 당신은 내 공감대를 가지고 있습니다.
Sergiy Kolodyazhnyy

4

Foogod의 대답은 나에게 효과가 없었지만 솔루션의 절반을 제공하여 올바른 방향으로 이끌었습니다 (즉, fbiTTY 화면에 이미지를 표시 하면서 프레임 버퍼 데이터 읽기 ). 따라서 나는 그의 답변에 현상금을 수여했습니다.

Bellow는 fbterm단일 명령 줄 인수로 이미지의 부분 경로를 사용하여 쉽게 시작할 수있는 스크립트입니다.

용법

스크립트는 $PATH변수에 나열된 디렉토리에 저장해야합니다 . 가급적 개인 $HOME/bin폴더 에 있어야 합니다. PATH에 디렉토리를 추가하는 방법을 참조하십시오 . 개인 정보 bin를 에 추가하는 방법에 대한 설명이 $PATH있지만 bin홈 디렉토리에서 호출 된 디렉토리를 작성하면 PATH다시 로그인 할 때 추가 할 수 있습니다.

스크립트에는 실행 권한이 있어야합니다. 로 설정할 수 있습니다 chmod +x /path/to/script.sh.

마지막으로 sudo에 읽고 쓰는 루트 액세스를 허용하려면을 (를) 사용하여 실행해야합니다 /dev/fb0.

스크립트 소스

내 Github 리포지토리 에서도 사용할 수 있습니다 .

#!/bin/bash
# Author : Serg Kolo
# Date: Dec 5, 2015
# Description: Script to render image and set it as background
# in conjunction with fbterm
# Depends: fbterm,fbi, awk
# Written for: /ubuntu//q/701874/295286

function printUsage
{
  echo "<<< Script to set background image in TTY console"
  echo "<<< Written by Serg Kolo, Dec 5 , 2015"
  echo "<<< Usage: scriptName.sh /path/to/image"
  echo "<<< Must be ran with root privileges, in TTY only"
  echo "exiting"

}

# check if we're root, if there's at least one ARG, and it is a TTY

if [ "$(whoami)" != "root"   ] || [ "$#" -eq 0  ] ||  [ "$( tty | awk '{gsub(/[[:digit:]]/,""); gsub(/\/dev\//,"");print}' )" != "tty"  ] ;then

   printUsage
   exit 1
fi



# read the full path of the image

IMAGE="$( readlink -f "$@" )"

# Launch fbi with whatever image was supplied as command line arg
# then take out whatever is the data in framebuffer;
# Store that data to /tmp folder

( sleep 1; cat /dev/fb0 > /tmp/BACKGROUND.fbimg ; sleep 1; pkill fbi ) & fbi -t 2 -1 --noverbose -a  "$IMAGE"

# This portion is really optional; you can comment it out 
# if you choose so

echo "LAUNCH FBTERM ?(y/n)"
read ANSWER

if [ "$ANSWER" != "y"  ] ; then
   echo exiting
   exit 1
fi

# The man page states that fbterm takes screenshot of 
# what is currently in framebuffer and sets it as background
# if FBTERM_BACKGROUND_IMAGE is set to 1
# Therefore the trick is to send the framebuffer data captured
# in the last step (which will display the image on screen)
# and then launch fbterm. Note, that I send output from the command
# send to background in order to avoid the extra text displayed on 
# screen. That way we have clear image in framebuffer, without 
# the shell text, when we launch fbterm

export FBTERM_BACKGROUND_IMAGE=1 
clear
( cat /tmp/BACKGROUND.fbimg  > /dev/fb0 &) > /dev/null; sleep 0.25; fbterm 

추가 정보

사용자가 반드시 사용할 필요는 없습니다 sudo. 그룹에 /dev/fb0속하므로 video사용자는 다음을 사용하여 해당 그룹에 자신을 추가 할 수 있습니다.

sudo usermod -a -G video $USER

따라서 위 스크립트에서 루트 검사는 더 이상 사용되지 않습니다 [ "$(whoami)" != "root" ] ||.

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