3 คะแนน โดย GN⁺ 2023-10-08 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • นี่คือ MVP/POC สำหรับใช้แท็บเล็ตเครื่องเก่าเป็น หน้าจอเทอร์มินัล SSH แทนการเป็นจอเสริมแบบส่งพิกเซล โดยเชื่อมต่อจากไคลเอนต์ SSH บน Android ไปยังคอมพิวเตอร์ แล้วส่งคีย์อินพุตเข้าเซสชัน screen
  • แนวทางนี้เหมาะกับกรณีที่การ์ดจอถึงขีดจำกัดแล้วหรือหา virtual display adapter ไม่ได้ และต้องการหลีกเลี่ยงการส่งพิกเซลไปยังแท็บเล็ตเมื่อดูเฉพาะข้อความ เช่น การ tail log
  • โฟลว์พื้นฐานคือ เปิด SSH server บนคอมพิวเตอร์ จากนั้นเชื่อมต่อด้วยเทอร์มินัล/ไคลเอนต์ SSH บนแท็บเล็ต แล้วสร้างเซสชันด้วย DISPLAY=:0 screen -R aux โดยมีโปรแกรมรับอินพุตแยกต่างหากที่ส่งตัวอักษรเข้าเซสชันในลักษณะเช่น screen -S aux -X stuff x
  • การตั้งค่า DISPLAY=:0 ทำให้เมื่อรันคำสั่งอย่าง xdg-open ., emacs &, git gui & จากเทอร์มินัล ก็จะเห็นผลลัพธ์บนเซสชัน GUI หลักได้
  • ปัจจุบันยังเป็น MVP/POC ที่มีข้อจำกัดด้านความปลอดภัยและการใช้งาน
    • ต้องให้สิทธิ์แอปมือถือเข้าถึงคอมพิวเตอร์ทั้งเครื่อง
    • ต้องเปิด SSH server บนคอมพิวเตอร์ และแนะนำให้เปิดใช้งานเฉพาะบนเครือข่ายที่เชื่อถือได้ แล้วปิดในกรณีอื่น
    • มีปัญหาเรื่องการจัดการอินพุต C-SPC, การเรียก screen แยกสำหรับทุกปุ่มกด และความยากในการหาไคลเอนต์เทอร์มินัลบนอุปกรณ์รุ่นเก่า
    • ทั้งสองวิธีต่างพึ่งพา LAN
  • ผู้เขียนระบุว่าในสภาพแวดล้อมสำนักงานที่ใช้ Kindle Fire มันทำงานเป็นเทอร์มินัลได้ดี แต่ในบ้านเมื่อใช้ iPad เป็นหน้าจอ Emacs นั้นช้าเกินไป
  • การวางใช้ Ctrl+Shift+V เพื่อส่งเนื้อหาในคลิปบอร์ดทั้งหมดเข้าเซสชัน screen ส่วนการคัดลอกยังแก้ปัญหาไม่ได้
  • แนวทางที่อาจดีกว่าซึ่งถูกเสนอไว้คือใช้ส่วนประกอบของ hyper, xterm.js, การแสดงผลผ่านเบราว์เซอร์, การส่งคีย์อินพุตผ่าน WebSocket และเซิร์ฟเวอร์แบบ PTY

1 ความคิดเห็น

 
GN⁺ 2023-10-08
ความคิดเห็นบน Hacker News
  • บน สภาพแวดล้อมเดสก์ท็อป GNOME ของ Linux สามารถใช้แท็บเล็ตเป็นจอภาพเสริมได้ ไม่ใช่แค่สำหรับเทอร์มินัล: https://www.omgubuntu.co.uk/2022/06/use-ipad-as-second-monit...
    ยังรอโซลูชันที่ดีกว่าสำหรับสตรีมเกมไปยัง “จอ” แท็บเล็ตตัวที่สองแบบนี้อยู่

    • เพิ่งลองดู แต่พอจะติดตั้ง Microsoft RDP client ก็ขึ้นว่า ต้องใช้ iOS 15 ขึ้นไป เลยติดตั้งบน iPad รุ่นเก่าไม่ได้
      สุดท้าย iPad รุ่นเก่าน่าจะใช้งานจริงด้วยวิธีนี้ได้ยาก และอาจลองหา RDP client ตัวอื่นที่ใช้ได้ดู
    • ใช้กับ X11 ไม่ได้ และไม่เห็นเคอร์เซอร์ด้วย
      ถ้าไม่ต้องใช้เคอร์เซอร์ก็ทำงานได้ค่อนข้างดี
    • สงสัยว่าใช้กับ KDE ได้ไหม หรือมีโซลูชันคล้าย ๆ กันหรือเปล่า
  • เคยลองใช้ Weylus: https://github.com/H-M-H/Weylus
    ทำงานผ่าน LAN และควบคุมเมาส์จากแท็บเล็ตได้
    บางครั้งมีดีเลย์ แต่ปรับความละเอียดให้ใช้แบนด์วิดท์น้อยลงได้ และไม่ค่อยแน่ใจว่าเสถียรแค่ไหน
    ไม่ได้ใช้เป็นประจำ

  • ถ้ามีแล็ปท็อปหรืออุปกรณ์เหลือ ๆ บน Windows SpaceDesk เป็นแอปฟรีที่ดี ไม่ใช่โอเพนซอร์ส: https://www.spacedesk.net/
    ใช้ร่วมกับ WSL2 บนเครื่องพัฒนา Windows และเอาแล็ปท็อปเก่ามาใช้เป็นจอภายนอกอยู่ ซึ่งทำงานได้ดีแม้ผ่าน Wi‑Fi

    • เคยทำให้ SpaceDesk ผ่าน USB-C ใช้ได้บนแท็บเล็ต Amazon ราคาถูก และสำเร็จหลังจากเข้าใจว่าต้องเปิดโหมด PTP บนแท็บเล็ต
      น่าจะค่อนข้างดีสำหรับใช้เป็นจอเสริมเวลาเดินทาง และแทบไม่รู้สึกถึงดีเลย์แม้ที่ 60fps และการตั้งค่าสูง
    • เห็นข้อกำหนดว่า iOS 9.3+ เลยมีความหวัง แต่ติดตั้งแอปบน iPad 2 สภาพดีที่เก็บไว้ไม่ได้
      บน iPad ที่ยังรองรับอยู่ บางครั้งก็ใช้ฟีเจอร์จอเสริม iPad ในตัวของ macOS ซึ่งทำงานได้ค่อนข้างดี
  • ถ้า คอนเน็กเตอร์สายแพ LVDS ของอุปกรณ์พวกนี้มีมาตรฐานมากกว่านี้คงดี
    จะได้ซื้อแค่อะแดปเตอร์ HDMI/DisplayPort มาใช้ได้ทันที แม้ในความเป็นจริงจะมีอะแดปเตอร์แบบนั้นอยู่ แต่เท่าที่รู้มาตรฐานสายแพ LVDS ไม่ได้รวมเป็นหนึ่งเดียวหรือใกล้เคียงเลย

  • รู้สึกว่า systemctl พิมพ์ยาก
    ถ้าต้อง start/stop service บ่อย ๆ แนะนำให้ตั้ง alias เช่น alias sc='sudo systemctl'
    ยังเข้ากันได้ดีกับ sc ซึ่งเป็นยูทิลิตี “service control” ใน Windows NT รุ่นหลัง ๆ และน่าจะใช้ได้ใน bash/fish
    ตอนพัฒนา service ถ้าห่อ stop, status, start ด้วยฟังก์ชันอย่าง sce, sci, scs ก็ช่วยลดความยุ่งยากที่ต้องคอยเปลี่ยนทั้งคำสั่งย่อย st* และอาร์กิวเมนต์ตัวที่สองทุกครั้ง

    • เห็นด้วย แต่รู้สึกว่า journalctl พิมพ์แย่กว่านั้นอีก
  • ถ้าจะใช้โทรศัพท์เก่าคล้าย ๆ กันเป็น ทางเลือกแทน Stream Deck สามารถใช้ TouchPortal ได้: https://www.touch-portal.com/
    ไม่ฟรี แต่ไม่แพง และทำงานได้ดีอย่างน่าประหลาดใจ

    • ดูเหมือนเป็นซอฟต์แวร์ฟรีและโอเพนซอร์สที่ทำงานคล้ายกัน: https://stream-pi.com/
      จากวิดีโอที่กำลังฟังอยู่ ตอนนี้ client มีเฉพาะ Linux ส่วน host รองรับ Windows และ Linux
      เคยลองใช้ Surface Pro ที่รัน Linux เป็น client และ Windows เป็น host อยู่บ้าง แต่สิ่งที่ฉุดไว้ตอนนี้คือ ปลั๊กอินยังน้อย
      ใช้ Stream Deck สำหรับจัดการเซสชันเกมอยู่ แต่ถ้าต้องจัดการ Steam, Discord, ซาวด์บอร์ดและเสียงของ Voicemod, OBS เป็นครั้งคราว, การเปิดเกม ฯลฯ ตอนนี้ทำได้แค่ OBS กับสิ่งที่ตั้งคีย์ลัดไว้ประมาณนั้น
  • แท็บเล็ตควรมี อินพุต HDMI/DisplayPort เพื่อให้ใช้เป็นจอแสดงผลได้ทันที

    • ถ้าไปอีกขั้น อุปกรณ์ทุกอย่างควรมี โปรโตคอลสื่อสารมาตรฐาน อย่าง TCP
      จอแสดงผลก็จะปรากฏเป็นอุปกรณ์อีกชิ้นหนึ่งที่อ่านและเขียนไบต์ได้ และอุปกรณ์ทุกชิ้นมีอินเทอร์เฟซแบบ self-documenting บน HTTP/HATEOAS ที่ query ได้
      HDMI/DisplayPort หรือ USB A/B/C/.../Z ก็ควรใช้โปรโตคอลอย่างกิกะบิตอีเทอร์เน็ตหรือ Thunderbolt แล้วให้แบนด์วิดท์เป็นตัวกำหนดเฟรมเรตสูงสุดที่ความละเอียดใด ๆ ก็พอ
      น่าจะ query metadata ของอินเทอร์เฟซอุปกรณ์ แล้วส่งรับอาร์เรย์ของไบต์กับจอแสดงผล เครื่องพิมพ์ หรืออุปกรณ์เก็บข้อมูลได้ โดยโครงสร้างต่างกันแค่ส่วนต้นของ header
      แม้แต่กล้องและสแกนเนอร์ก็น่าจะดาวน์โหลดไฟล์ภาพและวิดีโอโดยตรงได้เหมือนโฟลเดอร์เอกสารบนเว็บเซิร์ฟเวอร์ โดยไม่ต้องใช้ไดรเวอร์จากผู้ผลิต ไม่มีเหตุผลทางเทคนิคที่ทำให้เป็นไปไม่ได้ และมองว่า Microsoft กับ Apple คอยขัดขวางการทำให้เป็นแบบทั่วไปเช่นนี้มาตลอด
      มาตรฐานเว็บก็ไหลไปในแนวทางการออกแบบแบบคณะกรรมการ ทำให้ความหวังที่จะรวมสิ่งเหล่านี้หายไป และสมาร์ตโฟนกับแท็บเล็ตก็ดูเหมือนเป็นสุดขั้วของแนวคิดบริโภคนิยมแบบ proprietary ที่ถูกทำให้เป็นสินค้า
    • ถ้าเสียบ USB HDMI capture dongle กับแท็บเล็ต ก็ใช้แบบนี้ได้
      โดยทั่วไปน่าจะดูผ่านเว็บแคมวิวเวอร์ตัวไหนก็ได้ และบน iPad ก็มีแอปเฉพาะอย่าง https://orion.tube/
      รู้ว่า Android ก็มีตัวเลือกอยู่ แต่ไม่มีแท็บเล็ต Android รุ่นใหม่ ๆ ให้ทดสอบ
  • เมื่อก่อนใช้ Duet แก้โจทย์นี้
    ขยายหน้าจอแล็ปท็อปไปยังจอ iPad ได้ เลยใช้งานได้ดี: https://www.duetdisplay.com/

  • เป็นไอเดียที่ดี
    เคยทำแบบคล้ายกันด้วย bash, awk, xev, xdotool แทนที่จะใช้โปรแกรมแยกต่างหาก
    ภายใน screen ก็ใช้การตัด/วางของ screen ส่วนที่เหลือใช้ copy buffer ของ screen กับ xclipboard ก็พอ