क्या कमांड लाइन से स्क्रीन पर पिक्सेल लगाने के लिए फ्रेमबफ़र तक पहुंचना संभव है?


16

मुझे यकीन नहीं है कि यह एकमात्र संभव तरीका है, लेकिन मैंने पढ़ा कि आपकी पसंद के स्थान पर स्क्रीन पर एक एकल पिक्सेल लगाने के लिए किसी को फ्रेमबफ़र नामक स्थान पर कुछ लिखना होगा। इसलिए मैं उत्सुक हो गया, अगर इस जगह में प्रवेश करना संभव है और स्क्रीन पर कहीं एक एकल पिक्सेल प्रदर्शित करने के लिए इसमें कुछ लिखना है।


आपने निर्दिष्ट नहीं किया है कि कौन सा ओएस। लिनक्स?
गाइल्स का SO- दुष्ट होना बंद करें '

हां, लिनक्स (टकसाल कोडनेम
रिबेका

जवाबों:


17

हाँ, एक्स-सर्वर के बाहर, ट्टी में, कमांड का प्रयास करें:

cat /dev/urandom >/dev/fb0

अगर कोलीफुल पिक्सल स्क्रीन भरता है, तो आपका सेटअप ठीक है, और आप इस छोटी स्क्रिप्ट के साथ खेलने की कोशिश कर सकते हैं:

#!/usr/bin/env bash

fbdev=/dev/fb0 ;   width=1280 ; bpp=4
color="\x00\x00\xFF\x00" #red colored

function pixel()
{  xx=$1 ; yy=$2
   printf "$color" | dd bs=$bpp seek=$(($yy * $width + $xx)) \
                        of=$fbdev &>/dev/null
}
x=0 ; y=0 ; clear
for i in {1..500}; do
   pixel $((x++)) $((y++))
done

जहाँ फंक्शन 'पिक्सेल' का उत्तर होना चाहिए ... डिवाइस / डेव / fbX के xy ऑफ़सेट पर बाइट वैल्यू (ब्लू-ग्रीन-रेड-अल्फा) को बदलकर स्क्रीन पर एक पिक्सेल लिखें जो वीडियो-कार्ड के लिए फ्रेम बफर है।

या एक लाइनर पिक्सेल ड्रा (x: y = 200: 100, यदि चौड़ाई 1024 है पर पीला):

printf "\x00\xFF\xFF\x00" | dd bs=4 seek=$((100 * 1024 + 200)) >/dev/fb0

अद्यतन: यह कोड एक्स-सर्वर के अंदर भी काम करता है, अगर हम सिर्फ फ्रेम बफर का उपयोग करने के लिए एक्स को कॉन्फ़िगर करते हैं । fb0 को /usr/share/X11/xorg.conf.d/99-fbdev.nf के अंदर निर्दिष्ट करके


यहाँ पर कुछ खतरनाक चीजें चल रही हैं: पहला उदाहरण किसी कारण के लिए एक फ्लॉपी डिस्क पर यादृच्छिक बाइट्स लिखना है। अनुवर्ती आदेशों का उपयोग ddकिया जाता है जिसे अक्सर विशिष्ट कारणों के लिए "डिस्क नष्ट" कहा जाता है ... इन आदेशों के पास न जाएं जब तक कि आप यह नहीं जानते कि आप क्या कर रहे हैं ...
रॉबर्ट

4
@robert मुझे लगता है कि उमर का मतलब था /dev/fbXऔर /dev/fdसिर्फ एक टाइपो था। और हाँ, ddखतरनाक है लेकिन ऐसा है rm। इसका मतलब यह नहीं है कि इसका इस्तेमाल नहीं किया जाना चाहिए। इसका सिर्फ इतना मतलब है कि इसका इस्तेमाल सावधानी से किया जाना चाहिए।
terdon

आह /dev/fb0और समझ में आता है! हर कोई जानता है कि क्या rmमतलब है, लेकिन ddथोड़ा अधिक अस्पष्ट है, फिर भी लगता है कि इसे स्वास्थ्य चेतावनी देना चाहिए।
रॉबर्ट

2
"हाँ, एक्स-सर्वर के बाहर, टटी में, कमांड का प्रयास करें:" मुझे समझ नहीं आता है कि क्या मुझे यह सही मिला है, इसलिए मैंने बस टर्मिनल खोलने की कोशिश की और "बिल्ली / देव / urandom> / dev / fd0" लेकिन मैं केवल मिला एक त्रुटि संदेश: "कैट: राइट एरर: डिवाइस पर कोई स्थान नहीं बचा है"। मुझे वास्तव में नहीं पता है कि एक्ससेवर से कैसे निकला जाए।
अब्दुल अल हज़्रेड

1
... मैंने इसे टटी कहा, लेकिन यह वर्चुअल कंसोल, नॉन-गाई चीज, टर्मिनल ऑन ऑल स्क्रीन है, कि आप ctrl-alt-f1,2,3 ... या "sudo chvt 1" ... के साथ पहुंचें कोई स्थान नहीं बचा है 'ऐसा लगता है कि यह ठीक होगा, बस आप अभी भी एक्स-सत्र में हैं।
असैन कुजोविक

0

मैंने आज सुबह ही इसे पोस्ट किया था, फिर भी जांच कर रहा था कि यह केवल रास्पबेरी पेस्ट पर क्यों काम करता है। https://www.raspberrypi.org/forums/viewtopic.php?f=72&t=213964&p=1428891#p1428891

ओपन / देव / fb0, इसे मैप करें ताकि आपको एक पॉइंटर मिले, और यह बहुत तेज हो। X का उपयोग बिल्कुल नहीं करता है, लेकिन यह X को खुशी से अनदेखा कर देगा, यह स्क्रीन पर बस कुछ है।

ओह, एक कमांड लाइन से, की तरह, आप / देव / fb0 को लिख सकते हैं। लेकिन आप ऑफसेट 0 पर जो कुछ भी लिखते हैं वह ऊपरी बाएँ कोने में होगा इसलिए यह तुरंत स्क्रीन को स्क्रॉल करेगा। आप बैश में लूप के लिए कर सकते हैं और एक हजार बार लिख सकते हैं। या उपयोग / देव / उरुग्म। स्क्रीनबफ़र में जो कुछ भी है, उसे नष्ट करना, विशेष रूप से जब आप एक्स में हैं, तो कोई बड़ी बात नहीं है। जैसे ही आप क्षेत्र में एक खिड़की को खींचते हैं, एक्स एक एक्सपोजर घटना का कारण बनता है और इसे पुन: पेश करता है। आपको ठीक होने के लिए शक्ति को मारने की आवश्यकता नहीं है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.