Using E-Ink tablet as monitor for Linux

2025/12/09 23:10

Using E-Ink tablet as monitor for Linux

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

**記事では、Androidのe‑inkタブレット(Onyx BOOX Air 2)を低消費電力のセカンドモニターに変える方法を紹介しています。作者はまずDeskreenを試しましたが、古いデバイスでの高遅延とストリーミング品質の悪さから使えないと判断し、VNCへ切り替えました。TigerVNC(

sudo pacman -Sy tigervnc
)をインストール後、
vncpasswd
で VNC パスワードを作成し、
$XDG_CONFIG_HOME/tigervnc/passwd
(権限 0600)に保存します。そして
/etc/tigervnc/vncserver.users
にユーザーマッピングを設定。最小構成ファイル
$XDG_CONFIG_HOME/tigervnc/config
では
session=i3
geometry=1400x1050+0+0
FrameRate=30
localhost
alwaysshared
を指定しています。VNC サーバは次のオプションで
x0vncserver
を起動します

-PasswordFile … -Geometry 1400x1050+0+0 -FrameRate 30 -AlwaysShared \
- SendCutText=false -SendPrimary=false -AcceptCutText=false

ポート 5900 で実行。シェルスクリプトは

xrandr
を使って e‑ink ディスプレイを追加出力に設定し、VNC セッションを開始します。このスクリプトは rofi ランチャーから素早く起動できます。また、作者は高コントラストの Neovim テーマ(例: “shine” や
background=light
)が e‑ink 画面でうまく機能することを指摘しています。この構成により、安価な e‑ink タブレットを低消費電力のセカンドディスプレイとして再利用でき、軽量 VNC が非従来型 Linux 周辺機器にも使えることが示されています。

本文

2025年12月08日発行

執筆者:アルイレザ・アラビ • 6分読了


目次

  1. 成果物の紹介
  2. 試み 1:Deskreen
  3. 試み 2:VNC
       • VNCサーバー設定
         – インストールと初期設定
         – x0vncserver を直接起動
         – 自動起動の仕方
         – スクリプトで実行する方法
  4. 脚注

成果物の紹介

現在、私の画面を古いAndroid e‑ink タブレット(Onyx BOOX Air 2)にミラーリングできます。VNC のレイテンシはほぼゼロで、主な制約はe‑inkディスプレイの低リフレッシュ率と遅延です。テキスト閲覧・入力時に邪魔にならず、デュアルモニタ構成では一方を単なるミラー、もう一方を通常作業用として活用できます。


試み 1:Deskreen

Deskreen は簡単に使えるものの、ブラウザ内で画面を表示する必要があります。

  • ストリーミング品質がテキスト読み取りには不十分です。
  • 入力遅延が高く、特に古い BO Air 2 では顕著でした。

結果:Deskreen は私の要件を満たさなかった。


試み 2:VNC

最初は VNC サーバー構築がやや怖そうに思えましたが、約20分で完了しました。サーバーには TigerVNC を、タブレット側には AVNC(任意の Android VNC クライアント)を使用しています。

VNCサーバー設定

  1. TigerVNC のインストール

    sudo pacman -Sy tigervnc
    
  2. パスワード作成

    vncpasswd          # $XDG_CONFIG_HOME/tigervnc/passwdにハッシュが保存されます
    chmod 0600 $XDG環境変数 $HOME/.config/tigervnc/passwd
    
  3. ユーザーとポートのマッピング

    /etc/tigervnc/vncserver.users
    を編集:

    :1=アリレザ
    
  4. セッション設定

    $XDG_CONFIG_HOME/tigervnc/config
    (最小構成)を作成:

    session=i3
    geometry=1400x1050+0+0
    passwd‑file=$X技術? …  
    

(以下省略)

(ここで…) …


The content appears…?? …

We need translate entire article. Provide Japanese translation. Ensure length similar. Let's craft final.2025年12月08日 発行

執筆者:アルイレザ アラビ • 読了時間 6 分


目次

  1. 成果物の紹介
  2. 試み 1:Deskreen
  3. 試み 2:VNC
       • VNCサーバー設定
         – インストールと初期設定
         – x0vncserver を直接起動
         – 自動起動の方法
         – スクリプトで実行する手順
  4. 脚注

成果物の紹介

現在、私の画面を古い Android e‑ink タブレット(Onyx BOOX Air 2)にミラーリングできます。VNC のレイテンシはほぼゼロで、主な制限は e‑ink ディスプレイの低リフレッシュ率と遅延です。テキストの閲覧・入力時に邪魔にならず、デュアルモニタ構成では「一方を単なるミラー、もう一方を通常作業用」として有効活用できます。


試み 1:Deskreen

Deskreen は使い勝手が良いものの、画面をブラウザ内で表示する必要があります。

  • ストリーミング品質はテキスト閲覧に不十分。
  • 入力遅延が大きく、特に古い BOOX Air 2 では顕著でした。

結論:Deskreen は私の要件を満たしませんでした。


試み 2:VNC

最初は VNC サーバー構築がややハードル高く感じましたが、約20分で設定完了です。サーバーには TigerVNC、タブレット側には AVNC(任意の Android VNC クライアント)を使用しています。

VNCサーバー設定

  1. TigerVNC のインストール

    sudo pacman -Sy tigervnc
    
  2. パスワード作成

    vncpasswd          # $XDG_CONFIG_HOME/tigervnc/passwd にハッシュが保存されます
    chmod 0600 $XDG_CONFIG_HOME/tigervnc/passwd
    
  3. ユーザーとポートのマッピング

    /etc/tigervnc/vncserver.users
    を編集:

    :1=alireza
    
  4. セッション設定

    $XDG_CONFIG_HOME/tigervnc/config
    (最小構成)を作成:

    session=i3
    geometry=1400x1050+0+0
    passwd-file=$XDG_CONFIG_HOME/tigervnc/passwd
    FrameRate=30
    localhost
    alwaysshared
    
    • geometry
      は e‑ink の解像度(1400 × 1050)に合わせます。
    • +0+0
      で共有領域を画面左上に配置します。
    • 起動前にコンピュータのディスプレイを 1400 × 1050 に変更してください。
  5. x0vncserver を直接起動

    x0vncserver \
      -PasswordFile $HOME/.config/tigervnc/passwd \
      -Geometry 1400x1050+0+0 \
      -FrameRate 30 \
      -AlwaysShared \
      -SendCutText=false \
      -SendPrimary=false \
      -AcceptCutText=false
    
    • 必須なのは
      -PasswordFile
      のみ。残りは任意です。
  6. Android から接続
    AVNC(または他の VNC クライアント)を開き、

    192.168.0.50:5900
    に接続します。両デバイスが同一ローカルネットワークにあり、ファイアウォールでポート 5900 が許可されていることを確認してください。

x0vncserver を自動起動

Arch Wiki にはいくつかの方法があります。自分のワークフローに合うものを選んでください。

スクリプトで実行

「e‑ink モード」を素早く切り替える小さなヘルパースクリプトです:

#!/usr/bin/env sh

PRIMARY_DISPLAY=$(xrandr --listactivemonitors | sed '2q;d' | cut -d " " -f 6)
SECONDARY_DISPLAY=$(xrandr --listactivemonitors | sed '3q;d' | cut -d " " -f 6)

# e‑ink の解像度に合わせてメインディスプレイを設定
xrandr --output "$PRIMARY_DISPLAY" --mode 1400x1050

# セカンダリモニタを左側の右隣に配置
xrandr --output "$SECONDARY_DISPLAY" --right-of "$PRIMARY_DISPLAY"

# VNC セッション開始
x0vncserver \
  -PasswordFile $HOME/.config/tigervnc/passwd \
  -Geometry 1400x1050+0+0 \
  -FrameRate 30 \
  -AlwaysShared \
  -SendCutText=false \
  -SendPrimary=false \
  -AcceptCutText=false

ヒント:暗号化 VNC が必要な場合は Arch Wiki を参照してください。自宅や職場ではほとんど不要です。


脚注

Neovim でライトテーマ(例:

:colorscheme shine
:set background=light
)を使用すると、e‑ink 用に画面が真っ白でコントラストが高く保たれます。

同じ日のほかのニュース

一覧に戻る →

2025/12/14 7:58

Linux Sandboxes and Fil-C

## Japanese Translation: メモリ安全性とサンドボックスはプログラムの異なる部分を保護するため、両方が強力なセキュリティに必要です。純粋な Java プログラムはメモリ安全であってもファイルシステムの syscalls を通じて任意のファイルを書き込むことができるし、逆にすべての能力を取り消したアセンブリプログラムでもメモリバグがある場合がありますが、カーネルが特権 syscalls を殺すためサンドボックスから逃げられません。サンドボックスは意図的に許容範囲を広く設計しているため、攻撃者は残されたメモリ安全性のバグを利用してブローカー・プロセスへ到達することができるので、両方の防御を組み合わせるとより強固な保護が得られます。 本書では、C/C++ 用に設計され、システムコールまで安全性を保証し、init や udevd などの低レベルコンポーネントで使用できるメモリ安全ランタイム「Fil‑C」への OpenSSH の seccomp ベース Linux サンドボックス移植方法について説明します。OpenSSH は既に chroot を採用し、`sshd` ユーザー/グループとして特権なしで実行し、`setrlimit` を使用し、非許可 syscalls を `SECCOMP_RET_KILL_PROCESS` で殺す seccomp‑BPF フィルタを適用しています。Fil‑C はその runtime 内で自動的にこれらの syscalls を許可することで簡素化します。背景スレッドは存続させつつスレッド生成を防ぐため、Fil‑C は API `void zlock_runtime_threads(void)` を追加し、必要なスレッドを事前確保してシャットダウンを無効にします。 OpenSSH の seccomp フィルタは強化されています。失敗時の挙動が `SECCOMP_RET_KILL` から `SECCOMP_RET_KILL_PROCESS` に変更され、mmap 許可リストに新たに `MAP_NORESERVE` フラグが追加され、`sched_yield` が許可されています。サンドボックスは二つの `prctl` コール(`PR_SET_NO_NEW_PRIVS` と `PR_SET_SECCOMP`)で構築され、エラー検出も行われます。Fil‑C のランタイムは `filc_runtime_threads_handshake` で全スレッドとハンドシェイクし、各スレッドが no_new_privs ビットと seccomp フィルタを持つことを保証します。複数のユーザー スレッドが検出された場合、安全エラーが発生します。 メモリ安全性とサンドボックスを組み合わせることで、OpenSSH はより厳格な隔離を実現し、メモリバグによる権限昇格リスクを低減します。このアプローチは他のセキュリティクリティカルプロジェクトにも採用を促す可能性があります。

2025/12/14 9:34

An Implementation of J

## Japanese Translation: ## 改訂版要約 本書は、技術仕様の構造化された目次であり、以下のように整理されています。 1. **第0章 – はじめに** 2. **第1章 – 文を解釈する** - 1.1 単語生成 - 1.2 構文解析 - 1.3 トレイン(列車) - 1.4 名前解決 3. **第2章 – 名詞** - 2.1 配列 - 2.2 型 - 2.3 メモリ管理 - 2.4 グローバル変数 4. **第3章 – 動詞** - 3.1 動詞の構造 - 3.2 ランク - 3.3 原子(スカラー)動詞 - 3.4 オブヴァース、同一性、および変種 - 3.5 エラー処理 5. **第4章 – 副詞と接続詞** 6. **第5章 – 表現** - 5.1 原子表現 - 5.2 ボックス化された表現 - 5.3 木構造表現 - 5.4 線形表現 7. **第6章 – ディスプレイ** - 6.1 数値表示 - 6.2 ボックス化表示 - 6.3 フォーマット済み表示 主要セクションの後に、付録A〜F(インキュナブルム、スペシャルコード、テストスクリプト、プログラムファイル、外国接続詞、およびシステム概要)が補足資料として提供されます。書末には参考文献・用語集・索引が付されています。 この構成(目次 → 詳細セクション → 付録 → 参照資料)は、読者に全体枠組みを最初に把握させたうえで、必要に応じて詳細へ掘り下げたり補足資料を参照したりできる明確かつ階層的な道筋を提供します。

2025/12/14 8:39

Closures as Win32 Window Procedures

## Japanese Translation: **改訂版要約:** この記事では、Win32 のウィンドウプロシージャに追加のコンテキストポインタを渡す方法を示しています。これは、WndProc が通常 4 つしか引数を取らないため、ネイティブ API には備わっていない機能です。著者は x64 アセンブラで小さなトランスペイル(trampoline)を作成し、実行時に JIT コンパイルして 5 番目の引数スロットを挿入し、呼び出し前に必要なコンテキストを格納します。これにより、各ウィンドウがグローバル変数や `GWLP_USERDATA` を使わずに独自の状態を保持できるようになります。トランスペイルは GNU アセンブラで書かれ、`.exebuf` セクション(`bwx` フラグ付き)から 2 MiB の実行可能バッファが確保されます。C ヘルパー関数 `make_wndproc(Arena *, Wndproc5, void *arg)` は 2 つのバイトオフセットプレースホルダーを修正してトランスペイルを生成します。作成後は `set_wndproc_arg(WNDPROC p, void *arg)` を使ってコンテキストを変更できます。アロケータ例では、異なる状態オブジェクト用に複数のトランスペイルを生成したり、動的に切り替えたりする方法を示しています。この手法は、トランスペイルがアンウインドテーブルを持たないため Windows Control Flow Guard 下でも安全に機能し、グローバル変数を使わずにウィンドウごとのデータを付与する低レベルの手段を示しています。