題:
您可以安裝僅運行一個完整窗口應用程序的精簡版Linux嗎?
Mark A. Donohoe
2017-11-09 04:07:46 UTC
view on stackexchange narkive permalink

嘗試拿我的Pi Zero W並將其嵌入一台投影儀中以創建一個信息設備。換句話說,我不需要,甚至不需要帶有窗口管理等功能的完整桌面的開銷。

我已經閱讀了所有我需要的是運行X11服務器的Linux,然後是我的應用-客戶-只需與之交談。我還聽說我的應用程序既可以充當X11服務器也可以充當客戶端。

我已經看到人們談論將Raspbian直接啟動到全屏應用程序中,但是如果我是正確的,從技術上講,它仍在加載整個Raspbian桌面-只是將其隱藏-因此它仍在使用關鍵資源。

那麼我在想什麼呢?一個帶有網絡的準系統Linux安裝,但是除了單個窗口應用程序外沒有UI?諸如無線之類的事情可以通過配置文件等來處理。解決此問題的最佳方法是什麼?

您可以完全刪除X11並使用ncurses GUI。 //www.faqs.org/docs/Linux-HOWTO/NCURSES-Programming-HOWTO.html#AWORDWINDOWS)
您是否估計或測試了開銷是否確實在影響您的應用程序?我希望這不是主要的瓶頸。您應該期望與僅使用功能更強大的嵌入式PC相比,實現此目標所付出的努力可能會大大超過您所獲得的收益。通常,這種類型的練習用於將嵌入式產品中的控制器“降級”驅動到速度較慢或功能較少的設備,以節省“物料清單”上的費用。順便說一句,如果您沒有積極使用Desktop Manager,則資源使用量為... **最小**
嗨,@crasic!這項工作的重點是學習如何與Pi一起玩。我想如果我真的要深入研究這些細節,不妨弄髒我的手。了解有關Linux,Pi,X11等的好方法。我已經在Windows和Mac,iOS和Android以及Arduino甚至Netduino上進行編程。在我看來,Pi是下一個合乎邏輯的玩法。我需要一個信息面板,因此,整個鳥群只需要一塊石頭就可以了。
三 答案:
crasic
2017-11-09 10:51:07 UTC
view on stackexchange narkive permalink

我將從正式的 Raspbian-Lite開始,因為它已經可以根據需要進行精簡,並且可以與硬件一起使用。

默認情況下,您免費獲得功能齊全,重量輕的linux(時間,金錢,自由)

  1. 內核
  2. Coreutils(Shell和基本shell工具)
  3. 網絡工具(WLAN和SSH)
  4. 系統框架,例如 python ruby​​ perl
  5. ol>

    “一個帶有網絡的簡單Linux安裝,但是除了單個窗口應用程序外沒有UI?可以通過配置文件等處理無線之類的東西。什麼是最好的方法來解決這個問題?“

    檢查! (注意,配置已經通過文件完成,GUI工具只是用於編輯配置文件和定期讀取狀態文件以跟踪動態信息的界面

    只有你不做的事情get是任何類型的GUI。下面的更多內容。


    GUI選項

    在編寫GUI應用程序時,通常需要具備一些常見元素。 EG

  • 按鈕(事件和鼠標處理)
  • 窗口/子窗口(重疊緩衝區)
  • 工具欄(上下文相關可見性)
  • 文本框(
  • 圖像

選擇框架時,在為您完成的功能和必須重新發明的功能之間存在權衡。

注意:計算按鈕繪製像素很簡單,但是要創建一個可以檢測並響應各種任意輸入(單擊,雙擊,拖動,滑動,滾動等)的系統。 。)實際上非常非常難(閱讀:乏味且容易出錯)。

下面是對一些簡單的顯示器的簡要說明。

1.幀緩衝

屏幕上的原始圖形輸出實際上本身就是一個文件。即使未安裝 X ,該文件也存在。

/ dev / fb0

有關此內容的描述可在內核文檔中找到。

但是,對於我們來說,將其想像為屏幕的“位圖”就足夠了。有很多警告,因為數據的格式取決於平台。

您的應用程序(用 c python java 代碼>,等等)。將打開此文件,並向其寫入( Platform Dependent!)字節以顯示和修改顯示器上的圖像。它還需要從鼠標和鍵盤獲取原始輸入,並將其解釋為單擊按鈕,然後將事件(調用)分配給適當的功能。

例如

cat / dev / urandom > / dev / fb0

將使彩色像素隨機填充屏幕

2。 X Windowing System(X11 aka Xorg)

最臭名昭著的framebuffer用戶。簡而言之,這提供了

  1. Windows(可能重疊獨立區域)
  2. 輸入(鼠標和鍵盤)
  3. 事件
  4. 大多數人將使用更高級別的GUI庫(例如 GTK Qt wxWidgets )來創建可用的對象,例如按鈕和工具欄, X 提供的基本功能。這些庫還極大地簡化了為按鈕和按鍵之類的事件創建“事件處理程序”的過程。

    您還可以使用 OpenGL

    直接繪製圖形。使用X不需要運行全功能的GUI桌面,甚至不需要安裝圖形桌面即可。運行圖形應用程序

    您的應用程序(同樣, python c ++ ,無論如何)將使用GUI工具和 Xlib (用於Xorg的API)可在屏幕上繪製窗口小部件,窗口等。

    注意:當在桌面環境下運行全屏應用程序時,幾乎沒有其他GUI工具在後台運行,從而模仿了這種用法。

3。基於文本的用戶界面(nCURSES!)

基於文本的用戶界面是上述所有內容的簡單替代,並且可能是“信息設備”概念的一種涼爽而優雅的解決方案。

此應用程序直接使用終端外殼來創建具有ASCII字符的可視顯示。 ncurses 庫受多種語言支持,並在控制台環境中提供類似於GUI的窗口,緩衝區,按鈕,選項卡,輸入等概念

您實際上可以創建一個非常簡單的基於菜單的界面,僅使用帶有內置linux實用程序

dialog

的shell腳本即可創建上面顯示的界麵類型下圖的左側。

enter image description here

關於Raspbian Lite非常有趣。對此一無所知。正如您所說,它根本不會給您任何GUI(即沒有'Desktop',對嗎?)就我的使用而言,我需要繪製圖形基元並能夠縮放和旋轉它們,但我只需要基本輸入(例如,單擊了鍵盤按鈕或鼠標按鈕,或者甚至單擊了GPIO引腳上的按鈕,但沒有屏幕上的光標或類似的東西。“輸入”將作為補充。請考慮Kindle上的翻頁按鈕。人帶來了Pygame,您可以在Raspbian Lite中使用它嗎?
*“可以在Raspbian Lite中使用它嗎?” *-是的,它具有完全相同的操作系統,因此支持所有相同的軟件包。唯一的區別是默認情況下未安裝Desktop Packages,但您可以通過一個命令將lite版本轉換為“完整”版本。 *“即沒有'Desktop',對嗎?” *-對,當系統啟動時,會為您提供控制台外殼,什麼也沒有。
bobstro
2017-11-09 20:10:48 UTC
view on stackexchange narkive permalink

我在這裡做過類似的事情。回應您的第3段的關鍵點:X的實現與Windows或MacOS完全不同。它不是“全有還是全無”,因此,如果不需要,您無需加載“完整桌面”。可以簡單地將幾層總結為:

  1. X窗口系統。如果啟動X時沒有其他層,則背景為灰色,僅此而已,無法在GUI中啟動程序。您可以編寫啟動腳本來啟動程序。通常,您會啟動一個終端(例如 xterm ),可用於從中啟動其他程序。您沒有很好的標題欄或按鈕來操作窗口。
  2. 窗口管理器。這是添加彩色桌面,標題欄和按鈕以操縱窗口的層。您可以但不必添加文件管理器,啟動欄和其他功能。情況看起來更好,但是程序之間幾乎沒有集成。
  3. 桌面環境。這些將所有內容組合在一起,提供集成剪貼板,聲音管理等功能,以及感覺更像是消費者“桌面”的其他功能。
  4. ol>

    我想您想要的是第2層。但沒有別的,因此您可以啟動GUI程序。有一些非常輕量級的窗口管理器可用。我為視頻中的項目選擇了OpenBox。

    當然,您可以完全放棄GUI並使用文本界面進行構建,但是如果您想利用Web技術或使用GUI工具包,您可能需要一個最小的GUI。

    如果您想更多信息,Wikipedia提供了很好的摘要。

Technico.top
2017-11-09 06:42:55 UTC
view on stackexchange narkive permalink

我的情況非常相似,確實選擇使用 pygame ,這是一個與SDL(圖形庫)綁定的python。

優點:
由於SDL不依賴X11,因此pygame可以從控制台運行,並顯示一個不錯的全屏圖形應用程序,可高度自定義(又名:您從黑屏開始,然後在其上繪製所需內容) Pygame的文檔討論的相當好,非常簡單,它提供了在單個庫中管理用戶交互和界面所需的所有基本功能。

壞點:
Pygame缺少GUI內容:您需要將每個按鈕,圖標,框繪製為圖像文件。 (您仍然可以僅使用代碼在屏幕上顯示幾何形狀和文本。)
某些用戶輸入必須手動管理:例如,不要指望“開箱即用”使用文本字段對象:您只會能夠閱讀原始的鍵盤按鍵,並且必須在右側頁面中編輯右側按鈕,然後每次按時刷新屏幕!不必為此擔心太多,它不會引起戲劇性,只是有點煩人。

如果您想嘗試pygame,請查看adafruit的該軟件 ,這是在構建GUI時的一個很好的啟發:Button和Icon類的編寫非常好,頁面管理也很不錯。

替代項
還有其他編寫圖形界面的工具,無需X11即可運行,甚至對GPU進行了優化:dispmanx和openMax。它們的使用難度更大(gpu內存管理很麻煩),並且您的客戶端需要使用C / C ++編寫。最糟糕的是,這些庫缺少pygame可以提供的大量工具(沒有用戶輸入管理。)

有趣的是您應該提到Pygame!我剛剛從Adafruit購買了Raspberry Pi Zero的OLED Bonnet Pack,他們特別提到OLED屏幕只有128x64。另外,對於我的應用程序,HDMI將連接到運行在320x240的廉價LED投影儀上。如果您說Pigame可以同時用於兩者,那對我來說可能是雙贏!但是...您為操作系統做了什麼?您是否仍加載整個Raspbian桌面?那就是我一直回到的絆腳石。就像去商店買牛奶一樣。
另一則評論...我需要圖形可以通過翻譯旋轉。任意角度。不必是高性能的。甚至可以是10FPS。不在乎我只需要能夠根據需要旋轉它即可。哎呀……即使是基本的OpenGL也能用。關鍵是我不需要鼠標或桌面,不需要文本輸入或按鈕或其他任何東西。我將閱讀鍵盤,但是要做的只是像我們剛才討論的那樣旋轉屏幕。
我可以確認,您不需要使用台式機,µ
關於雙輸出,我不知道您是否可以運行pygame兩次,或者是否需要使用鏡像程序(fbcp或raspi2raspi都可以),是的,pygame可以平移或旋轉而沒有任何問題:)
更精確地說:pygame可以在raspbian-lite操作系統上運行,並且能夠以高FPS進行處理(至少在小屏幕分辨率下如此!)


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...