Kiedyś aktywnie korzystałem z konsol pełnoekranowych (otwartych za pomocą Ctrl+ Alt+ F1... F6) i wpadłem na pomysł, że chciałbym spróbować ozdobić ją pewnego rodzaju „tapetą” (oczywiście ciemną i monotonna) aby nie zmniejszało to czytelności), być może mogłoby to wyglądać i czuć się ładnie (lub nie, ale muszę spróbować). Byłoby jeszcze lepiej, gdybym mógł ustawić różne obrazy jako różne tła konsoli (jeden dla Ctrl+ Alt+ F1, inny dla Ctrl+ Alt+ F2itd.).
Fakt, że konsole mają znacznie wyższą rozdzielczość niż tryb czystego tekstu, sugeruje, że używany jest dla nich pełnoprawny tryb graficzny i wszystko jest możliwe. Ale jak?
tty
virtual-console
Ivan
źródło
źródło
framebuffer
urządzenie, ale z tym ekranem jest zajęty wyjście jakiegoś programu, takiego jakfbi
. TTY sam w sobie jest nadal urządzeniem tekstowymOdpowiedzi:
Jestem prawie pewien, że sterownik konsoli Linux nie ma wbudowanej tej możliwości, jednak istnieje wywoływana aplikacja,
fbterm
która może to zrobić. Aby obrazy w tle działały, potrzebujesz również narzędzia, które może wyświetlać obraz w buforze ramki, takiego jakfbi
:fbterm
tak naprawdę nie czyta ani nie wyświetla obrazów tła, oczekuje, że jakiś inny program skonfiguruje obraz tła na ekranie przed jego uruchomieniem. Na stronie podręcznika znajdują się instrukcje,fbterm
jak to zrobić zafbv
pomocą absolutnie przestarzałego i nieobsługiwanego narzędzia, którego nie mogłem nawet skompilować na nowoczesnym systemie Ubuntu.fbi
jest znacznie czystszą i ładniejszą przeglądarką obrazów dla bufora ramki, ale niestety nie ma funkcji „ustaw i wyjdź” prostszejfbv
, a zatem przeszkadza,fbterm
jeśli spróbujesz użyć go bezpośrednio. Udało mi się jednak wymyślić alternatywę, która działa:Najpierw musisz użyć
fbi
icat
wyświetlić żądany obraz, a następnie zrzucić go do pliku obrazu „raw framebuffer”. Jako root w konsoli bufora ramki uruchom:(To będzie wyświetlać obraz na kilka sekund, a następnie zjazd, po zapisany wynik w pliku
nifty-background.fbimg
. Wymieńnifty-background.fbimg
inifty-background.png
ze cokolwiek jest nazewnictwo chcesz, oczywiście).Pierwsza część polecenia czeka 1 sekundę przed umieszczeniem zawartości bufora ramki w pliku. W tym samym czasie uruchamia
fbi
się druga część (po &), aby wyświetlić obraz w buforze ramki, dzięki czemu gdy komenda cat zabierze się do wykonania (1 sekunda później), jest tam obraz do zrzucenia. Powodem, dla którego są w tej kolejności, jest to, że znalazłemfbi
problemy, jeśli nie były uruchomione na pierwszym planie, co oznacza, że musi to być ostatnie polecenie na liście.Odtąd, za każdym razem, gdy chcesz uruchomić
fbterm
, możesz uruchomić go w ten sposób (możesz utworzyć mały skrypt otoki):źródło
… Co jest jednym ze sposobów, w jaki spostrzegawczy mógł odróżnić prawdziwy BSOD w systemie Windows od działań żartu wygaszacza ekranu BSOD, który robił obchody dziesięć lat temu. Wyświetlanie blokowych znaków graficznych przy użyciu sprzętu karty graficznej w trybie graficznym było nieznacznie różne od znaków generowanych przez sprzęt karty graficznej w trybie tekstowym.
Tak, karta graficzna jest w trybie graficznym. Tak było już od dłuższego czasu. Tak było zawsze w systemach bez sprzętu karty graficznej. We wczesnych latach Linuksa na konsolach PC konsola miała sprzęt w postaci karty graficznej w trybie tekstowym. Ale to zastosowanie cicho zanikło prawie do zera. Obsługa Unicode dla większości użytkowników wymaga obecnie większego zestawu glifów niż sprzęt w trybie tekstowym. Oprogramowanie wewnętrzne maszyny (oczywiście) używa trybu graficznego do ekranów powitalnych (z ładnymi zdjęciami i logo firmy), podobnie jak moduł ładujący Linux i inicjalizacja systemu.
W jądrze Linuksa znajduje się emulator terminala. Jest ułożony warstwowo na buforze ramki i podsystemie zdarzeń wejściowych, do którego dostępu używa wewnętrznych interfejsów jądra. Przedstawia się systemom w trybie aplikacji jako seria wirtualnych urządzeń końcowych jądra
/dev/tty1
i tak dalej.Ten program jest dość ograniczony w porównaniu do emulatorów terminali, które działają poza jądrem Linuksa, jak zwykłe aplikacje. Emuluje tylko ograniczony podzbiór prawdziwego terminalu i brakuje mu dodatkowych funkcji tego ostatniego emulatora terminala.
To są te, na które musisz poszukać. Możesz być zaznajomiony z emulatorami terminali, które używają X do ich wejścia / wyjścia, takie jak xterm, lxterminal, konsola gnome, konsola, eterm, wterm i inne. Mniej znane są te, które używają urządzeń bufora ramki i urządzeń zdarzeń wejściowych do ich wejścia / wyjścia. udostępnianie wirtualnych terminali w przestrzeni użytkownika :
console-terminal-emulator
iconsole-fb-realizer
, iNiektóre z tych ostatnich mogą robić, co chcesz.
fbterm można skonfigurować tak, aby używał na przykład wszystkiego, co jest w buforze ramek podczas uruchamiania, jako obrazu tła. Wszystko, co należy zrobić, to użyć jednego z kilku innych narzędzi do wyświetlania obrazów bezpośrednio w buforze ramek Linux, aby skonfigurować obraz tła przed uruchomieniem fbterm. Istnieje kilka takich narzędzi, w tym:
fbvis i fbi usuwają ekran przy wyjściu i wymagają zwojów wyjaśnionych bardziej szczegółowo w odpowiedzi Foogod. dfbg jednak nie oczyszcza się po sobie, co czyni go bardziej odpowiednim do tego konkretnego zadania.
Dalsza lektura
źródło
Chociaż odpowiedź Foogod nie działała dla mnie, doprowadziła mnie we właściwym kierunku, dostarczając połowę rozwiązania (a mianowicie odczyt danych bufora ramki, podczas gdy
fbi
wyświetla obraz na ekranie TTY). Dlatego nagrodziłem jego odpowiedź nagrodą.Poniżej znajduje się skrypt, który ułatwia uruchomienie
fbterm
z częściową ścieżką do obrazu jako pojedynczym argumentem wiersza poleceńStosowanie
Skrypt należy zapisać w katalogu wymienionym w
$PATH
zmiennej. Najlepiej, aby znajdował się w$HOME/bin
folderze osobistym . Zobacz Jak dodać katalog do ŚCIEŻKI? o wyjaśnienie w jaki sposób dodać swoją osobistąbin
TO$PATH
, ale tworząc katalog o nazwiebin
w katalogu domowym jest wystarczająca, aby dodać go doPATH
dnia ponownego logowania.Skrypt musi także mieć uprawnienia do wykonywania; możesz to ustawić za pomocą
chmod +x /path/to/script.sh
.Na koniec należy go uruchomić
sudo
, aby umożliwić rootowi dostęp do odczytu i zapisu/dev/fb0
.Źródło skryptu
Dostępne również w moim repozytorium Github.
dodatkowe informacje
Okazuje się, że użytkownik niekoniecznie musi korzystać
sudo
;/dev/fb0
należy dovideo
grupy, więc użytkownicy mogą po prostu dodać się do tej grupy za pomocąW ten sposób kontrole roota w powyższym skrypcie stają się nieaktualne, a konkretnie
[ "$(whoami)" != "root" ] ||
część.źródło