%EF%BC%9F.png)
我曾經積極使用全螢幕控制台(那些用Ctrl+ Alt+ F1...打開的F6控制台),並且想到了一個想法,我想嘗試用某種“壁紙”來裝飾它(當然是相當黑暗和單調的)這樣就不會降低可讀性),也許這看起來和感覺都很好(或者不是,但我需要嘗試)。如果我可以將不同的圖片設定為不同的控制台背景(一張用於Ctrl++ ,另一張用於++Alt等),那就更好了。F1CtrlAltF2
事實上,控制台具有比純文字模式提供的更高的分辨率,這表明它們使用了成熟的圖形模式,並且一切皆有可能。但如何呢?
答案1
我很確定 Linux 控制台驅動程式沒有內建此功能,但是有一個名為 的應用程式fbterm
可以執行此操作。為了使背景圖像正常工作,您還需要一個可以在幀緩衝區上顯示圖像的實用程序,例如fbi
:
sudo apt-get install fbterm fbi
fbterm
它本身並不實際讀取或顯示背景圖像,它期望其他程式在啟動之前在螢幕上設置背景圖像。手冊頁中有fbterm
關於如何使用 來執行此操作的說明fbv
,這是一個絕對過時且不受支援的實用程序,我什至無法在現代 Ubuntu 系統上進行編譯。fbi
是一個更乾淨、更好的幀緩衝區圖像檢視器,但不幸的是沒有更簡單的「設定並退出」功能fbv
,因此fbterm
如果您嘗試直接使用它會受到干擾。然而,我能夠想出一個可行的替代方案:
首先,您需要使用fbi
並cat
顯示所需的影像,然後將其轉儲到「幀緩衝區原始格式」影像檔案。以 root 身分在幀緩衝區控制台中運行:
( 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
答案2
我可以區分真實文字模式和圖形模擬。
……這是觀察者可以區分 Windows 上真正的 BSOD 和大約十年前流行的笑話 BSOD 螢幕保護程式的方法之一。在圖形模式下使用顯示適配器硬體顯示的區塊圖形字元與在文字模式下由顯示適配器硬體產生的字元略有不同。
是的,顯示適配器處於圖形模式。這種情況已經有一段時間了,現在。它是總是在沒有 PC 顯示適配器硬體的系統上採用這種方式。在 Linux 的早期,在 PC 相容機上,控制台將具有文字模式的顯示適配器硬體。但這種用途已悄悄消失,幾乎消失殆盡。如今,大多數用戶的 Unicode 支援需要比文字模式硬體更大的字形集。機器韌體(當然)使用圖形模式顯示初始螢幕(帶有漂亮的圖片和公司徽標),Linux 載入程式和系統初始化也是如此。
Linux 核心中內建了一個終端模擬器程式。它位於幀緩衝區和輸入事件子系統之上,它使用內部核心介面來存取。它向應用程式模式系統呈現為一系列核心虛擬終端設備/dev/tty1
等。
與運行的終端模擬器相比,該程式相當有限外邊Linux內核,就像普通的應用程式一樣。它僅模擬真實終端功能的有限子集,並且缺乏後者終端模擬器的附加功能。
為此,您需要尋找那些人。您可能熟悉使用 X 作為輸入/輸出的終端模擬器,例如 xterm、lxterminal、gnome-console、konsole、eterm、wterm 等。較不為人所知的是使用幀緩衝區設備和輸入事件設備進行輸入/輸出的設備。提供使用者空間虛擬終端:
- 中康(Ubuntu 套件),
- 鍵盤,
- FB術語(Ubuntu 套件)及其分叉,例如聯合術語(Ubuntu 套件),
- 博格-bterm (Ubuntu 套件),
- 開胃菜
console-terminal-emulator
和console-fb-realizer
,和 - 公里斯康。
後者中的一些可以做你想做的事。
例如,fbterm 可以設定為在啟動時使用幀緩衝區中的任何內容作為背景影像。因此,人們需要做的就是使用其他幾個實用程式之一將圖像直接顯示到 Linux 幀緩衝區設備,以便在運行 fbterm 之前設定背景圖像。有幾種這樣的工具,包括:
fbvis 和 fbi 在退出時清除螢幕,並需要 Foogod 的答案中更詳細解釋的捲積。不過,dfbg 不會自行清理,這使其更適合此特定任務。
進一步閱讀
- https://unix.stackexchange.com/a/177209/5132
- https://unix.stackexchange.com/a/178807/5132
- https://unix.stackexchange.com/a/194218/5132
- 喬納森·德博因·波拉德 (2015)。“用戶空間虛擬終端”。 小吃指南。 1.20.吃點東西。 JdeBP 的軟體。
- 喬納森·德博因·波拉德 (2015)。快速瀏覽用戶空間虛擬終端 吃點東西。 JdeBP 的軟體。
- 吉爾特尤特霍文 (1998-10-25)。僅供參考:幀緩衝區控制台自 2.1.107 起發生變化。 Linux 核心。
答案3
雖然Foogod的答案對我不起作用,但它確實通過提供一半的解決方案(即讀取幀緩衝區數據,同時fbi
在TTY屏幕上顯示圖像)引導我走向正確的方向。因此我對他的回答給予了賞金。
Bellow 是一個腳本,可以輕鬆地將fbterm
映像的部分路徑作為單一命令列參數啟動
用法
腳本必須保存在變數中列出的目錄中$PATH
。最好它必須位於您的個人$HOME/bin
資料夾中。參考如何將目錄加入PATH?解釋如何將您的個人添加bin
到$PATH
,但創建一個bin
在您的主目錄中調用的目錄足以PATH
在重新登入時將其添加到。
該腳本還必須具有可執行權限;你可以用 來設定它chmod +x /path/to/script.sh
。
最後,它必須與 , 一起運行sudo
,以允許 root 存取權限來讀取和寫入/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: https://askubuntu.com/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
因此,上述腳本中對 root 的檢查變得過時,特別是[ "$(whoami)" != "root" ] ||
部分。
答案4
答案多於為我工作
但需要明確裝置對於聯邦調查局:
fbi -d /dev/fb0
就我而言,聯邦調查局正在嘗試 dri:/dev/dri/card0
為了可讀性可以使用imagemagick:
convert -fill '#202020' -colorize 80% "$1" /tmp/background
這將透過將影像轉換為覆蓋具有#202020
可見80%
性的顏色來模仿透明背景