2 điểm bởi GN⁺ 2024-08-05 | 1 bình luận | Chia sẻ qua WhatsApp
  • Đã triển khai bản demo màn hình e-ink 3,5fps bằng cách chụp màn hình macOS rồi truyền và hiển thị trên Kindle Paperwhite 3
  • Trên Kindle có một máy chủ listener viết bằng Go nhận ảnh ở cổng 8000, rồi dùng tiện ích tích hợp eips để vẽ JPG nhận được lên màn hình
  • Trên macOS, kết hợp screencapture, ImageMagicknetcat để xử lý việc chụp màn hình, chuyển đổi ảnh và truyền qua usbnet
  • Do kiến trúc gửi toàn bộ JPG ở mỗi frame, với các màn hình ít thay đổi như trình soạn thảo văn bản thì lãng phí băng thông truyền rất lớn và còn nhiều chỗ để cải thiện
  • Cho thấy có thể nhanh chóng thử nghiệm màn hình phụ e-ink chỉ bằng cách kết hợp các công cụ sẵn có, không cần codec riêng hay triển khai VNC

Jailbreak và lấy root shell

  • Bước đầu tiên là jailbreak Kindle để truy cập được root shell bằng một cách nào đó
  • Có thể tìm tài liệu liên quan trên mobileread.com, và tham khảo hướng dẫn trong thread LanguageBreak
  • Người triển khai không làm đúng y nguyên theo hướng dẫn LanguageBreak, nhưng đã dùng kho GitHub của LanguageBreak rất hữu ích cho việc debug
  • Điều kiện quan trọng hơn bản thân phương pháp jailbreak là lấy được shell root trên Kindle

Máy chủ listener trên Kindle và xuất bằng eips

  • Ở phía Kindle, đã viết một chương trình Go nhận file ở cổng 8000
  • Listener lưu JPG nhận được, rồi gọi eips, tiện ích xuất màn hình tích hợp của Kindle
  • Luồng ví dụ:
    • Chương trình Go nhận file JPG
    • Lưu vào /tmp/img.jpg
    • Vẽ lên màn hình bằng lệnh sau
eips -g /tmp/img.jpg -w gc16 -x 128 -y 0
  • Lệnh này hiển thị ảnh bằng partial update
  • Full update cho kết quả không tốt; có thể xem ý nghĩa các flag của eips tại wiki eips
  • Trước frame đầu tiên, có thể xóa màn hình bằng eips -c
  • Mã nguồn Go đã bị mất, nhưng đó chỉ là đoạn mã đơn giản dưới 30 dòng

Chụp màn hình macOS và chuyển đổi ảnh

  • Trên macOS, dùng screencapture để chụp màn hình lặp lại và lưu thành file PNG
  • Ảnh chụp được ImageMagick xoay, resize và chuyển sang grayscale cho khớp với màn hình Kindle
  • JPG đã chuyển đổi được gửi bằng netcat qua usbnet tới máy chủ listener trên Kindle
/usr/sbin/screencapture -C -x /tmp/orig.png
convert /tmp/orig.png -rotate 270 -resize '810x1448!' -type GrayScale -depth 8 -colors 256 /tmp/gray.jpg
cat /tmp/gray.jpg | nc -w 0 192.168.15.244 8000
  • screencapture -C -x chụp màn hình vào /tmp/orig.png
  • convert xoay ảnh 270 độ, resize thành 810x1448, rồi chuyển thành JPG grayscale 8-bit, 256 màu
  • nc gửi /tmp/gray.jpg đã chuyển đổi tới 192.168.15.244:8000
  • Cần thay đổi độ phân giải cho phù hợp với thiết bị Kindle đang dùng, và cổng cũng phải khớp với cấu hình máy chủ listener trên Kindle

Giới hạn về hiệu năng và khả năng sử dụng

  • Bản triển khai này là một bản hack làm nhanh cho vui vào đêm hôm trước, nên cả hiệu năng lẫn khả năng sử dụng đều còn nhiều chỗ để cải thiện
  • Cách gửi toàn bộ file JPG ở mỗi frame rất lãng phí
  • Lượng thay đổi giữa các frame liên tiếp phần lớn nhỏ và có thể dễ nén
    • Đặc tính này có thể càng nổi bật trong các trường hợp sử dụng chỉ một phần màn hình thay đổi, như trình soạn thảo văn bản
  • Ngay cả khi không tạo codec như h.264 hay giao thức như VNC từ đầu, có lẽ vẫn có thể cải thiện nhanh bằng các công cụ đã có sẵn

Tài liệu tham khảo

1 bình luận

 
GN⁺ 2024-08-05
Ý kiến trên Hacker News
  • Sẽ thú vị hơn nhiều nếu tác giả chia sẻ cách làm và đăng ở một nơi không phải nền tảng dành cho bài viết ngắn

    • Hiện tôi đang nhanh chóng viết một GitHub gist, sẽ đăng liên kết ở đây trong vài phút nữa
      Sửa: https://gist.github.com/adtac/eb639d3c707b55a28f0ee9a420aa7e...
    • Nếu là tôi thì có lẽ đã nói gay gắt hơn, nhưng cách diễn đạt này khá mang tính xây dựng. Tôi thật sự ghét việc đăng bài dài trên X/Twitter
      Nói thêm cho ai chưa biết: nếu trả lời một tweet bằng @threadreaderapp unroll, bạn sẽ nhận được tài liệu đã được ghép lại. Bot chỉ trả lời trực tiếp cho chính bạn sau khi hoàn tất việc bung thread
    • Thú vị là có người xem HN như một nền tảng dành cho bài viết ngắn
  • Tôi từng làm đầu vào HDMI cho một dự án tương tự
    https://hackaday.com/2021/01/08/old-kindle-shows-hdmi-video-...
    Vì vậy tôi đã làm OK Monitor: https://barwap.com/projects/okmonitor/

    • Nhân tiện, nếu có một phiên bản thương mại có sẵn, cắm là chạy thì tôi sẵn sàng trả tiền mua
      Tôi không nghĩ nó có tính kinh doanh. Doanh thu có lẽ chỉ ở mức vài nghìn đến vài chục nghìn USD, nên dù đặt biên lợi nhuận thế nào cũng khó thu hồi nhiều hơn thời gian hoặc chi phí đã bỏ ra. Dù vậy, trong các dự án sở thích, đôi khi tôi thấy người ta làm theo hướng đó để tạo ảnh hưởng
      Tôi muốn có một màn hình e-ink không dây cho máy tính, lý tưởng nhất là dạng USB-C dongle nhận cả hình ảnh lẫn nguồn. HDMI + nguồn USB cũng được
  • Trong vài ngày gần đây tôi đã thử Android + Kaleido3 như một thiết bị đa dụng, và cũng thử Termux-X11
    Kaleido3 khá dùng được. Nhờ waveform mới và thuật toán dithering phù hợp, có thể xem video với chỉ một vài thỏa hiệp hạn chế, và frame rate cũng cao. Lập trình cũng hoàn toàn khả thi; compiler và interpreter thì Termux cung cấp
    Với Termux-X11, bạn có thể chạy desktop Linux native trên thiết bị Android. Vì vậy không cần dùng e-ink như một phần của thiết bị màn hình, mà cũng có thể tận dụng trực tiếp nó như màn hình máy tính chủ động tích hợp trong tablet

  • Nếu ai muốn jailbreak Kindle thì nên bắt đầu từ diễn đàn mobileread

  • Liệu màn hình e-ink có ngày nào đó rẻ đi không? Tôi nghĩ các bằng sáng chế cơ bản giờ cũng sắp hết hạn rồi

    • Các sản phẩm cạnh tranh vẫn khá đắt. Màn hình giấy điện tử tôi dùng cho lịch số, theo tôi biết, không phải sản phẩm của E Ink, nhưng nếu mua lẻ thì khoảng 50 euro: https://www.waveshare.com/7.5inch-e-paper-hat.htm
      Đây là yếu tố chi phí lớn nhất trong chiếc lịch của tôi, và gần như ép cứng mức giá: https://shop.invisible-computers.com/products/invisible-cale...
    • https://news.ycombinator.com/item?id=26143779
    • Bằng sáng chế không liên quan mấy. Lý do E Ink đắt là vì đó là sản phẩm ngách với quy mô nhỏ. Màn hình LCD được sản xuất hàng chục tỷ chiếc mỗi quý, và rất có thể mỗi người đều sở hữu nhiều thiết bị có LCD
      Phần lớn những gì E Ink làm đều có thể được thay bằng LCD, mà E Ink lại đắt hơn LCD, nên không có nhiều nơi muốn dùng
      “Bằng sáng chế” gần như là thuyết âm mưu được nêu ra mà không có cơ sở rõ ràng. E Ink cũng có sản phẩm cạnh tranh, chẳng hạn màn hình DES/Display Electronic Slurry. Nếu E Ink corp đang chặt chém, GoodDisplay hẳn đã chiếm mất thị trường rồi
      Nói chính xác thì việc E Ink có bằng sáng chế không phải là thuyết âm mưu. Một số đã hết hạn, và E Ink corp cũng tiếp tục đăng ký bằng sáng chế mới trong quá trình đổi mới. Bằng sáng chế LCD cũng rất nhiều. Phần mang tính thuyết âm mưu là lập luận rằng bằng sáng chế gây ra việc tăng giá và giá cao, từ đó cản trở việc phổ biến công nghệ
  • Sao phải jailbreak? Chỉ cần dùng trình duyệt tích hợp của Kindle để stream ảnh chụp màn hình từ desktop là được mà

    • Cách đó đơn giản hơn nhiều. Nhưng mọi frame đều phải đi qua mạng → DOM → bộ nhớ ứng dụng trình duyệt → framebuffer, nên tôi hoài nghi liệu trình duyệt có đủ mạnh để xử lý frame rate dùng được hay không
      Trình duyệt Kindle còn barely theo kịp Kindle store hay Goodreads, nhưng tôi rất muốn được chứng minh điều ngược lại. Vì khi đó trên Kindle mới cũng có thể triển khai dễ hơn nhiều ở trạng thái mặc định
  • Nội dung trên GitHub: “Đáng tiếc là tôi đã làm mất mã nguồn Go

    • Tiếp đó còn nói “Dù vậy nó khá đơn giản, dưới 30 dòng
      Nếu đơn giản đến vậy thì việc không viết lại ngay rồi thêm lên GitHub mới là điều hơi lạ
  • Muốn làm việc này dễ thì chỉ cần dùng app Superdisplay trên máy đọc Boox

  • Câu hỏi quan trọng nhất vẫn chưa được trả lời: có đáng làm không?

    • Hiện vẫn còn quá sớm để kết luận. Nó không hữu ích làm màn hình chính, nhưng rất tuyệt làm màn hình phụ
      Ở dạng hiện tại, frame rate tốt nhưng độ trễ thì tệ khủng khiếp. Vì vậy trải nghiệm gõ phím kém, nhưng có nhiều mục đích sử dụng không cần gõ
      Ngay cả trong trường hợp phản hồi gõ phím độ trễ thấp là quan trọng, như cửa sổ chat, bạn có thể đặt ô nhập văn bản trên màn hình LCD và chỉ hiển thị phần lịch sử chat phần lớn là tĩnh trên Kindle. Để đạt đến mức đó còn cần thêm việc phải làm, nhưng hiện tại đây là một điểm khởi đầu tốt