Mặc dù câu trả lời của Foogod không hiệu quả với tôi, nhưng nó đã đưa tôi đi đúng hướng, bằng cách cung cấp một nửa giải pháp (cụ thể là đọc dữ liệu bộ đệm khung, trong khi fbi
hiển thị hình ảnh trên màn hình TTY). Vì vậy, tôi đã trao phần thưởng cho câu trả lời của anh ấy.
Bellow là một tập lệnh giúp dễ dàng khởi chạy fbterm
với một phần đường dẫn đến hình ảnh dưới dạng một đối số dòng lệnh
Sử dụng
Script phải được lưu trong một thư mục được liệt kê trong $PATH
biến của bạn . Tốt nhất là nó phải nằm trong $HOME/bin
thư mục cá nhân của bạn . Tham khảo Làm thế nào để thêm một thư mục vào PATH? về giải thích làm thế nào để thêm cá nhân của bạn bin
vào $PATH
, nhưng tạo một thư mục được gọi bin
trong thư mục chính của bạn là đủ để thêm nó PATH
vào khi đăng nhập lại.
Kịch bản cũng phải có sự cho phép thực thi; bạn có thể thiết lập nó với chmod +x /path/to/script.sh
.
Cuối cùng, nó phải được chạy với sudo
, để cho phép truy cập root để đọc và ghi /dev/fb0
.
Nguồn kịch bản
Cũng có sẵn trên kho Github của tôi.
#!/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
thông tin bổ sung
Hóa ra người dùng không nhất thiết phải sử dụng sudo
; /dev/fb0
thuộc về video
nhóm, vì vậy người dùng chỉ cần thêm chính họ vào nhóm đó bằng cách sử dụng
sudo usermod -a -G video $USER
Do đó, việc kiểm tra root trong đoạn script trên trở nên lỗi thời, cụ thể [ "$(whoami)" != "root" ] ||
là một phần.