Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ターミナルマルチプレクサのtmuxでSixel

 ターミナルマルチプレクサのtmuxでSixel

Kenichiro MATOHARA

November 19, 2023
Tweet

More Decks by Kenichiro MATOHARA

Other Decks in Technology

Transcript

  1. ターミナルマルチ
    プレクサのtmuxで
    Sixel
    Kenichiro Matohara(matoken)
    1

    View full-size slide

  2. matoken
    南隅から参加(鹿児島の右下)
    好きなLinuxディストリビューションはDebian
    map: © OpenStreetMap contributors
    Kenichiro Matohara(matoken) https://matoken.org
    https://inari.opencocon.org/@matoken
    2

    View full-size slide

  3. follow up 1

    でOBS Studio のDraft 版WHIP plugin を利用.
    先週リリースの でサポート
    🎉
    「鹿児島Linux勉強会 2023.06(オンライン開催)」 「WHIP を試
    す」
    OBS Studio 30.0
    Added WHIP/WebRTC output [Sean-
    Der / kc5nra / DDRBoxman / tt2468]
    With the introduction of WHIP, FTL
    is slated for removal in a release
    after May 2024
    3

    View full-size slide

  4. follow up 2

    を発表
    scrcpy v2.2 でカメラサポート
    🎥
    v2.0 でマイクサポートしていたので合わせてAndroid端末を
    WebCamとして使えるように
    DroidCam などの類似アプリと比べると手動でAndroidアプリ
    を導入する必要がないのがメリット?
    「鹿児島Linux勉強会 2023.05(オンライン開催)」 「Scrcpyで
    Android画面転送&操作」
    Release scrcpy v2.2 · Genymobile/scrcpy
    4

    View full-size slide

  5. tmux でもSixel
    tmux
    GNU screen などのターミナルマルチプレクサの一つ(おそらく
    いま一番メジャー)
    デタッチ,アタッチ機能で作業の続きを別の端末,回線, 画面縦横分
    割, ステータス表示等々
    Byobu や mosh/ssh と組み合わせるととても便利
    Sixel
    DEC発の端末でグラフックを表示する形式
    最近?様々な環境にサポートされていっている
    https://github.com/tmux/tmux
    5

    View full-size slide

  6. tmux 例
    — (左)nvim でスライド編集,(右上)w3m でプレビュー,(右下)コマン
    ド操作
    6

    View full-size slide

  7. tmux 設定
    初期設定はちょっと面倒,みんなのblog などから設定を引用して秘
    伝のタレ的な……
    Canonical発のByobu を使うとGNU screnn/tmux が即実用的
    な構成に → https://www.byobu.org
    7

    View full-size slide

  8. 端末でのグラフック
    基本的にascii art と色
    8

    View full-size slide

  9. 画像をascii art に変換
    $ ascii-image-converter ./2023_logo_rectangle_tran.png
    9

    View full-size slide

  10. 動画をasciiart で視聴(mplayer+caca)
    10

    View full-size slide

  11. 地図表示(MapSCII)
    11

    View full-size slide

  12. Sixel を利用すると
    $ convert ./2023_logo_rectangle_tran.png sixel:
    $ img2sixel ./2023_logo_rectangle_tran.png
    12

    View full-size slide

  13. tmux + Sixel
    — tmux で画面分割している.(左)LiveCamの最新画像を定期的に取
    得して表示,(右上)雨雲レーダーのWebを定期的に表示,(右
    下)sayakaでMisskeyのローカルタイムラインをストリーミング
    14

    View full-size slide

  14. Zellij

    ターミナルマルチプレクサ機能のあるターミナルワークスペースのZell
    Sixel に対応している
    "Zellij"
    "ターミナルワークスペースのZellij - Speaker Deck"
    https://zellij.dev/
    https://speakerdeck.com/matoken/taminaruwakusup
    15

    View full-size slide

  15. その他の端末で画像を表示する
    実装
    Kitty, iTerm2 等独自?実装で画像を表示できるよう(未検証)
    w3m には以前からX やframebuffer を利用した画像表示が可能
    だった.現在はSixel もサポート( $ w3m -sixel http://.. )
    前者はtmux の画面分割を無視した場所に画像が配置される,後
    者はtmux 上だとうまく描画されない?
    16

    View full-size slide

  16. tmux でSixel を使うには
    17

    View full-size slide

  17. Sixel に対応した端末が必要
    今回はmlterm,Microsoft Visual Studio Code でも設定変更
    で対応可能(らしい)
    "Are We Sixel Yet?"
    などが参考になる
    X無しの場合は やmterm-fb( ./configure --with-
    gui=fb ) がある
    https://www.arewesixelyet.com/
    yaft
    18

    View full-size slide

  18. Codiumでの設定例
    Must be enabled with
    “terminal.integrated.experimentalImageSupport”:
    true.
    19

    View full-size slide

  19. tmux のSixel 対応
    8月の Git commit 以降で ./configure --enable-
    sixel することで対応
    まだリリースはされていない( 2022-06-22 の tmux 3.3a が最
    新リリース )
    dfbc6b1
    20

    View full-size slide

  20. Debian のtmux パッケージバージョン
    unstable(sid) 以前は非対応バージョン
    experimental は対応バージョン
    $ rmadison tmux
    tmux | 2.8-3 | oldoldstable | source, amd64, arm64, armel, armhf
    tmux | 3.1c-1~bpo10+1 | buster-backports | source, amd64, arm64, armel, armhf
    tmux | 3.1c-1~bpo10+1 | buster-backports-debug | source
    tmux | 3.1c-1+deb11u1 | oldstable | source, amd64, arm64, armel, armhf
    tmux | 3.1c-1+deb11u1 | oldstable-debug | source
    tmux | 3.3a-3~bpo11+1 | bullseye-backports | source, amd64, arm64, armel, armhf
    tmux | 3.3a-3~bpo11+1 | bullseye-backports-debug | source
    tmux | 3.3a-3 | stable | source, amd64, arm64, armel, armhf
    tmux | 3.3a-5 | testing | source, amd64, arm64, armel, armhf
    tmux | 3.3a-5 | unstable | source, amd64, arm64, armel, armhf
    tmux | 3.3a-5 | unstable-debug | source
    tmux | 3.4~git20230924-1 | experimental | source, amd64, arm64, armel, armhf
    tmux | 3.4~git20230924-1 | experimental-debug | source
    21

    View full-size slide

  21. Debian experimental のtmux はSixel 対応
    $ wget http://deb.debian.org/debian/pool/main/t/tmux/tmux_3.4~git20230924-1.debian.tar.xz
    $ tar xvf ./tmux_3.4~git20230924-1.debian.tar.xz
    $ grep sixel debian/rules
    dh_auto_configure -- --enable-utempter --enable-systemd --enable-sixel
    $ grep -A5 3.4~git20230924-1 debian/changelog
    tmux (3.4~git20230924-1) experimental; urgency=medium
    * New upstream snapshot, from Git commit b777780720.
    * Enable Sixel support.
    -- Romain Francoise Sun, 24 Sep 2023 13:12:42 +0200
    1
    2
    22

    View full-size slide

  22. Debian 12 bookworm / sid でのSixel 対応tmux
    build 例
    1 tmux build 依存パッケージ導入
    2 関連パッケージ導入
    3 tmux source 入手
    4 sixel を有効にして( --enable-sixel ) configure &&
    make
    $ sudo apt build-dep tmux
    $ sudo apt install vlock build-essential git
    $ git clone https://github.com/tmux/tmux
    $ cd tmux
    $ ./configure --enable-sixel
    $ make
    1
    2
    3
    4
    23

    View full-size slide

  23. tmux でSixel が使えるのを確認
     Sixel 非対応の場合lsix で Error: Your terminal does
    not report having sixel graphics support.
    $ ./tmux -V
    tmux next-3.4
    $ ./tmux
    $ echo ${TERM_PROGRAM}
    tmux
    $ sudo apt install imagemagick
    $ wget https://github.com/hackerb9/lsix//releases/latest/download/lsix
    $ chmod u+x ./lsix
    $ ./lsix
    24

    View full-size slide

  24. いくつかのアプリでSixel で遊ぶ
    25

    View full-size slide

  25. lsix
    hackerb9/lsix: Like "ls", but for images. Shows
    thumbnails in terminal using sixel graphics.
    $ wget https://github.com/hackerb9/lsix//releases/latest/download/lsix
    $ chmod u+x ./lsix
    $ lsix
    26

    View full-size slide

  26. Imagemagick
    "ImageMagick – Convert, Edit, or Compose Digital
    Images" https://imagemagick.org/
    27

    View full-size slide

  27. img2sixel( libsixel-bin package)
    $ img2sixel IMAGEFILE
    $ img2sixel IMAGEFILE > SIXELFILE
    $ cat SIXELFILE
    $ curl -s https://upload.wikimedia.org/wikipedia/commons/thumb/8/80/Wikipedia-logo-v2.svg/103px
    img2sixel
    28

    View full-size slide

  28. 監視カメラを定期的に監視
    10分+動作時間毎に河川監視カメラの最新1コマSixel で表示し続ける
    $ while true ; do curl -s 'http://118.22.32.241/snap/k-camera20.jpg' | img2sixel ; sleep 600 ;d
    29

    View full-size slide

  29. YoutubeLiveを定期的に監視
    1分+動作時間毎にYoutubeLiveの最新1コマを画像に変換,Sixel で
    表示し続ける
    $ while true; do ffmpeg -i "$(yt-dlp --quiet -f 'bestvideo[height<=480]' -g IWPSU_aXdIE | head
    30

    View full-size slide

  30. ウェブサイトのスクリーンショ
    ットを表示
    川の防災情報の雨雲レーダーを定期的に表示
    $ while true; do chromium --headless --hide-scrollbars --window-size=800,500 --screenshot=/tmp
    'https://www.river.go.jp/kawabou/mb?zm=11&fld=0&clat=31.24891059083941&clon=130.67756652832034
    2>/dev/null ;img2sixel /tmp/myscreenshot.png ;sleep 600; done
    31

    View full-size slide

  31. misskey クライアント sayaka ちゃん
    Misskey のLHT を垂れ流しできる
    $ git clone https://github.com/isaki68k/sayaka
    $ cd sayaka
    $ sudo apt install libbsd-dev libwebp-dev libgif-dev libwslay1 libwslay-dev libmbedtls-dev lib
    $ ./configure
    $ bmake -DRELEASE sayaka
    $ ./src/sayaka --local misskey.io
    $ ./src/sayaka --show-nsfw --show-cw --local misskey.io
    32

    View full-size slide

  32. tui mastoton クライアントのtoot
    現時点では画像非対応
    image branch でAsciiArt で画像表示可能
    Kitty, iTerm2 向けの画像表示PR あり(未検証)
    Sixel 対応は検討中?(POC)
    https://github.com/ihabunek/toot/pull/319
    33

    View full-size slide

  33. 画面分割などはGUIでもいいので
    は?
    画面分割機能のあるターミナルやタイル型WMなどを使えば
    mlterm だと shift+F1/F2 で分割,shift+F3/F4 で移動
    速度も速い
    tmumx ならリモートでも行ける
    慣れてる
    34

    View full-size slide

  34. まとめ
    tmux がグラフックを扱えるSixel に対応
    Sixel が使えると端末上で画像確認ができて便利
    リモートの画像をコピーせずに端末で表示して確認したり(サーバリ
    ソースに気をつけよう)
    Sixel 対応tmux で端末で画面分割したりしながら画像を扱えて楽し

    実用度もそこそこある……と思う
    見たい情報をリモートでtmux 経由で表示しておいて,回線や電源
    が不安定な災害時や外出時にattach して閲覧など( ssh -C /
    ssh_config → Compression はしておきたい)
    35

    View full-size slide

  35. 奥付
    発表
    2023-11-
    19(sun)
    発表者
    利用ソフトウェア
    ライセンス
    鹿児島Linux勉強会 2023.11(オンライン開催)
    Kenichiro Matohara(matoken)
    Asciidoctor Reveal.js
    CC BY 4.0
    36

    View full-size slide