/ Dev / fb0 programının kullanıcı alanından bir konsol olarak kullanılması veya metin çıktısı alınması


24

Bu yüzden, geliştirici modunu etkinleştirdiğim ve bir Debian Squeeze chroot'u kurduğum bir Palm Pre (orijinal P100EWW) modelim var. Harika çalışıyor. Bunu HERHANGİ (bittorrent eş, web sunucusu) ama bir telefon için kullanmayı planlıyorum.

Yaptığımda cat /dev/urandom > /dev/fb0bir No space left on devicehata oluşana kadar ekrana rastgele pikseller yazdığını fark ettim . Müthiş, şimdi ekranı kullanabilirim.

Öyleyse, A) / dev / fb0'ı konsol olarak kullanmama izin verecek ya da B) komut satırından / dev / fb0 üzerinde metin yazmamı sağlayacak ne tür faydalar var?

Bunun için çekirdeği yeniden derlemeyi bilmiyorum (sonunda WebOS'u tamamen çıkarmayı ve bunu asgari bir ARM sunucusuna çevirmeyi çok isterdim), bu yüzden eğer varsa kullanıcı alanı araçları hakkında soruyorum. Ayrıca doğrudan / dev / fb0 dizinine yazmayı ve X kullanmamayı tercih ederdi.


Linux sanal konsolları bir çerçeve sürücü üzerinde çalışmalıdır. Sanal konsollar güçlü bir araçtır; Linux 2.6'dan beri her konsol için farklı yazı tipleri belirlemeye izin veriyorlar. Fakat (kullanıcı alanından) / dev / vcs  n ve / dev / vcsa  n ile / dev / fb0 üzerinden kontrol edilirler.
Incnis Mrsi

Yanıtlar:


11

Çerçeve çubuğunu konsol olarak kullanmak için fbdevmodüle ihtiyacınız vardır . Çekirdeğinizi yeniden derlemeniz gerekebilir.

Ayrıca framebuffer kullanımını kolaylaştıran bir kütüphane olan DirectFB projesine de ilgi duyabilirsiniz. Ayrıca zaten bunun için yazılmış uygulamalar ve GUI ortamları var.


1
Directfb'yi ( webos-internals.org/wiki/Directfb ) kurduğumda , dfbgüzerine bir resim koymama izin veren bir yardımcı program geldi (ve tamamlandıktan sonra kaldırmaz fbi). Muhtemelen bir blok metinden bir .png veya benzerini oluşturmak için bir yardımcı program bulabileceğimi biliyorum, bu yüzden bu işe yarayabilir ...
LawrenceC

24

Birkaç kişi Sorunuzun bölümlerini çekirdek ile uğraşan ve koyarak cevap vermiş görüntüleri framebuffer'ın üzerine (metin yerine), fakat şu ana kadar dinlenme adressiz kalır. Evet, çekirdek sanal terminal alt sistemini sözde framebuffer konsolu yapmak için kullanabilirsiniz . Ancak, çerçeve alanı aygıtını, kullanıcı alanı sanal terminalleri yapmak için kullanmanıza izin veren birkaç araç vardır . Bunlar şunları içerir:

  • zhcon ( Debian ) - CJK I / O’yu çekirdek alt sistemden çok daha iyi kullanmaya yönelik sanal bir kullanıcı terminali. Özel gücü ISO 2022 UTF olmayan kodlamaları kullanmakta; özel zayıflığı UTF kodlamalarıdır.
  • fbterm ( Debian ) - jfbterm dahil olmak üzere birkaç çatal üreten bir kullanıcı alanı sanal terminali . Bir sürü CJK giriş metodu eklentisine sahiptir.
  • bogl-bterm ( Debian ) - niterm gibi çatallar üreten bir kullanıcı alanı sanal terminali .
  • Ali Gholami Rudi'nin fbpad'i - X kütüphanelerine bağımlı olmayan minimalist bir kullanıcı alanı sanal terminali.
  • console-terminal-emulatorVe console-fb-realizeraraçlar nosh - Linux ve FreeBSD / PC-BSD çekirdeği sanal terminaller kopyalayan amaçlayan bir kullanıcı alanı sanal terminali. X kütüphanelerine de hiçbir bağımlılığı yoktur.
  • kmscon - sistemdekilogind sunucuya ve "koltuk" kavramlarına yakından bağlı bir kullanıcı sanal terminal .

Özellikle Ali Gholami Rudi, framebuffer çalışması için sadece bir terminal emülatöründen daha fazlasını üretti. Ayrıca doğrudan çerçeveli bir PDF görüntüleyici, VNC görüntüleyici, medya oynatıcı ve Kuran okuyucusu yazdı .

Yan yana tam bir karşılaştırma, bu cevabın kapsamı dışındadır; ama burada soruyla alakalı bazı noktalar var:

  • Belirtildiği gibi, kullanıcı-alanı sanal terminal programlarının birçoğu, yazı tipi kullanımı, klavye eşlemesi, CJK giriş yöntemleri ve benzerleri için X kütüphanesinden yararlanmaktadır. X istemcisi değiller, ancak X kütüphanelerinden bağımlılıkları var. fbpadve tasarımdaki nosh araçları hiçbir X kütüphanesinden faydalanmamaktadır.
  • Yazı tipi işleme için X kitaplıklarını kullanan programlar elbette X yazı tiplerini kullanır. Diğerleri başka düzenlemeler yapar.
    • bogl-bterm ve fbpad, her ikisinin de kendine özgü font formatlarına sahiptir. Biri BDF yazı tiplerini bdftoboglaraçla BOGL yazı tiplerine dönüştürür ; ve biri TTF'yi fbpad tarafından ft2tf ( Arch ) aracıyla birlikte kullanılan "tinyfont" yazı tiplerine dönüştürür .
    • Nosh console-fb-realizeraracı, yeni FreeBSD 10.1 çekirdek sanal terminal alt sisteminin yaptığı gibi aynı "vt" fontlarını kullanır ve böylece vtfontcvtBDF fontlarını dönüştürmek için FreeBSD font manipülasyon aracını paylaşır .
  • X kitaplıklarını kullanan programlar X klavye eşlemesini kullanır. Diğerlerine gelince:
    • Nosh araçlarının ISO "ortak" grup 2 ile tam ISO 9995-3 özellikli bir klavye sağlaması amaçlanan kendi kendine özgü klavye harita formatı vardır. Biri BSD kbdmap dosyalarını araçla bu formata dönüştürür console-convert-kbdmap. Yine, bu kbdmap dosyaları FreeBSD / PC-BSD vt alt sistemi ile kullanılanlardır .
    • fbpad kendi klavye eşlemesini hiç yapmaz ve çekirdek sanal terminal alt sisteminin ve bunun için klavye eşleme mekanizmasının varlığına dayanır.
  • Çağrıda bazı değişiklikler ve gerekli ayrıcalıklar var:
    • zhcon, fbterm, bogl-bterm, fbpad ve kmscon, terminal emülatörünün terminaldeki kabuk / giriş programını doğrudan bir alt süreç olarak ortaya koyması temelinde çalışır. Yumurtlamak için süper kullanıcı ayrıcalıklarına ihtiyaçları var login.
    • Uç aletler, mevcut bir /etc/ttys(BSD), /etc/inittab(Linux sistem 5 init) ya da getty / login / shell'in yumurtlama işini bıraktıkları başka bir sistemle entegre olacak şekilde tasarlanmıştır . console-fb-realizeryalnızca üst düzey kullanıcı ayrıcalıklarına gerek duymayan çerçeve oluşturucu ve giriş olayı aygıtlarını console-terminal-emulatoraçmak ve sırayla hiç özel ayrıcalıklara gerek duymayan FIFO'lara ve sıradan dosyalara erişmek için yeterli ayrıcalıklara ihtiyaç duyar.

Bunların hepsi elbette terminal emülatörleridir . Terminal emülasyonunu çıkarmak ve çerçeveye doğrudan metin eklemek için, bazı seçenekleriniz vardır:

  • bogl-bterm elbette Ben Pfaff'ın Ben'in Kendi Grafik Kütüphanesini , sistem kurulum / kurtarma ortamlarında (ve "PDA'lardaki GUI'ler için" ) kullanılmak üzere tasarlanmış bir çerçeve oluşturucu G / Ç kütüphanesine dayandırıyor . Elbette bunu doğrudan kullanan programlar yazabilirsiniz.
  • Kendi renderini yapmak için bir framebuffer kütüphanesinden yararlanan bir program yazmak ile kaçış dizilerini düşündüğü şeye yayan bir program yazmak arasında bir yarım kalan ev için: Uçbirim kullanıcı alanı sanal terminali modülerdir ve birbirinden ayrılır. bileşen parçaları. Bir basitçe kullanamazsınız console-terminal-emulator.

    console-fb-realizer/dev/vcsa*Sıradan bir dosya (karakter özel bir aygıt dosyası değil) ancak Unicode kod noktaları, ECMA-48 öznitelikleri ve 24 bit RGB renkleriyle aynı karakter karakter dizisine sahip bir ekran dosyası kullanır . Böylece biri onu çalıştırabilir ve sadece karakter + niteliğini + rengini doğrudan karakter hücre dizisi dosyasına yazabilir, böylece console-fb-realizeryazı tipi oluşturucuyu çerçeveye yerleştirir.

    Bir kenara: Bunun , kullanan console-terminal-emulatorfakat çalışmayan BRLTTY ile entegrasyonun zıddı olduğuna dikkat edin console-fb-realizer.


1
Bu inanılmaz bir cevap. Aydınlanma kütüphaneleri fbcon, derleme zamanı seçeneklerine bağlı olarak bir linux üzerinde framebuffer desteği talep ediyor . Bu aynı zamanda bağımlı terminal emülatörlerinde de geçerlidir. Terminoloji : Doğrudan linux framebuffer'da (fbcon) çalışır . Dışında terminology, ikinci kmscon (David Herrmann ve diğer çalışmaları) tavsiye kendim .
mikeserv

1
Rudi çerçevesiz bir usta! Bir gün ben de X11'i çıkaracağım.
Ciro Santilli,

10

Eğer ekranda kedi /dev/urandom > /dev/fb0yakalayıp rastgele pikseller elde edebiliyorsanız , ihtiyacınız olan her şeye sahipsiniz.

Benim durumumda biraz metin bilgisi bırakmam gerekiyordu. Bunu meşgul kutusunda ve raspi'de test ettim, bu yüzden sizin için işe yarayabilir. Cevap biraz uzun olabilir çünkü bazı konsolları kullanmazsanız karakter piksellerini kendiniz yazdırmanız gerekecektir. Neyse ki biri zor işi yaptı, bu yüzden birleştirmeliyiz.

Meşgul kutusunda veya raspi'nizde bir fbsetikili dosya bulunmalıdır . Bu, ayarlarınızı ekran boyutları olarak bulmanıza yardımcı olabilir.

Gömülü görünümüm şöyle:

# fbset

mode "480x272-1"
    # D: 0.104 MHz, H: 0.207 kHz, V: 0.657 Hz
    geometry 480 272 480 272 16
    timings 9600000 3 3 0 32 17 11
    accel false
    rgba 5/0,6/5,5/11,0/0
endmode

Buradaki önemli kısım, genişlik 480 ve yükseklik 272 pikseldir.

Bahsettiğiniz gibi, ekranı yerine getirebilirsiniz. cat /dev/urandom > /dev/fb0

ve ile temizleyebilirsiniz cat /dev/zeros > /dev/fb0

Ekranınızı temizledikten sonra, boyutları uygun şekilde alacağınızdan emin olmalıyız.

Şans eseri benim meşgul kutumda bir .ppm dosyası olarak giriş yapan bir fbsplash ikili dosyası vardı.

Yanılıyorsam düzelt, ancak fb0bu formatı kabul ediyor gibi görünüyor . Vikipedi'deki Portable Anymap'a bir göz attığımızda , birkaç "alt biçim" vardır ... fbsplash renkli bir renk kullanır, vb. Sadelik adına ASCII'de kodlanmış P1'i kullanalım. Dikey bir çizgi basabilirsek boyutlarımızın doğru olduğunu bilirdik. Hadi deneyelim:

Ppm tipinde bir dikey çizgi P1 şöyle görünmelidir:

P1
480 272
f 0 0 0 0 ... 0 
f 0 0 0 0 ... 0
... 
f 0 0 0 0 ... 0

Yani, 952 karakter genişliğinde 272 satır olacak. Belgeler, meşgul kutusunda f ... yerine 1 olması gerektiğini söylüyor ve raspi f daha parlaktı.

0'lı yıllardan sonra yeriniz olmaması önemlidir ... Bu görev biraz sıkıcı olabilir ... Size yardımcı olacak bir metin editörü kullanmanız daha iyi olabilir. Vim'de, ilk iki satırı kopyalayabilirsiniz, aşağıdaki karakterleri yazmak yerine komut moduna (esc) gidin:

of(esc)479a 0(esc)yy271p

Tabii ki, boyutlarımı kullanıyorum, sizinkini kullanmalısınız. Cat bu dosyayı /dev/fb0gibi görünmeli: Dikey çizgi ekranı

Tamam, hile yapıyorum ... orada sadece bir satır değil ... yaklaşık 8 ... ama işe yaramadığında (yanlış boyutlarımız var ya da sonunda yerimiz var, sadece bir satır olması çok Daha kolay).

Eğer o kadar uzaktaysan, sadece karakter olarak görmek için doğru pikselleri basmamız gerekir. Marcel Sondaar ve GitHub'daki deposu sayesinde, her bir grafiği çizmemize gerek kalmayacak.

Küçük bir çimdik biriyle yazdırmak için onun basit programı genişletmek fyerine Xve 0her Char arasındaki boşluklar eklemek yerine boşluk başlığını ekleyin ve biz onun charCode gelen harfiyle bir Ppm dosyası var.

Küçük bir adım daha ileri gidersiniz ve girdi olarak bir karakter elde edemezsiniz, bir satır. Bir dosya yakalayın, programınıza yönlendirin ve çıktı /dev/fb0alın ve bir metin çıktısı alın:

Metin çıktısı örneği

Ahududu pi üzerinde de bu çözümü test ediyorum ve işe yaradı. Sistem bana 2'den fazla bağlantı gönderecek bir üne sahip olmadığımı söylüyor. Bunu alana kadar, sözlerime güvenmelisin: D


2

Konsol tarafında, öğeleri yankılayabilir /dev/consoleveya syslog kullanabilirsiniz ve diğer çeşitli ayarlara bağlı olarak, konsolda görünebilir.

Görüntüler için sadece bir bmp dosyasını fb0'a çekmeyi denedim ve gerçekten işe yaradı! (sortof - çoklu kopya, daha küçük boyut)

Burada bmp-to-framebuffer programını buldum . Bu, fb0'ın beklediği formatın mükemmel bir örneği olmalıdır. Ayrıca, fbidoğrudan çerçeve arabelleğine yazmak için bir program vardır.


fbiEkrana bir resim koymama izin veriyor, bu kullanışlı, ancak çerçeveden çıktıktan sonra çerçeveyi temizliyor.
LawrenceC

0

Bu eski bir yazıdır ama normalde konsolu framebuffer'da çalıştırmak için framebuffer konsoluna (fbcon) ihtiyacınız olduğunu anlıyorum. Konfigürasyonda. (aygıt sürücüleri / grafikler / konsol ekranı ..)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.