ニュースリーダーのslrnを使ってみる

はじめに

slrn (S-Lang Newsreader) は、UNIX系システムで動作する、高機能なスレッド対応のテキストベースニュースリーダーである。
コマンドラインから操作でき、軽量でカスタマイズ性が高いのが特徴となっている。

packages.ubuntu.com/noble/news/slrn

環境

WSL2 Ubuntu 24.04 LTS
slrn: 1.0.3

使い方

インストール

Ubuntuの公式リポジトリに含まれているため、apt コマンドで簡単にインストールできる。

sudo apt update
sudo apt install slrn
ログ
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following packages were automatically installed and are no longer required:
  crack-common gyp libcares2 libgl1-amber-dri libglapi-mesa libjs-async libjs-events
  libjs-inherits libjs-is-typedarray libjs-prettify libjs-regenerate libjs-source-map
  libjs-sprintf-js libjs-typedarray-to-buffer libllvm17t64 liblttng-ust-common1t64
  liblttng-ust-ctl5t64 liblttng-ust1t64 libnotify-bin libqt5x11extras5 libre2-10
  libssl-dev libuv1-dev libxcb-damage0 mesa-utils-bin node-abbrev
  node-ampproject-remapping node-ansi-regex node-ansi-styles node-aproba
  node-are-we-there-yet node-arrify node-async node-async-each node-auto-bind
  node-babel-plugin-add-module-exports node-babel7-runtime node-balanced-match
  node-base64-js node-binary-extensions node-brace-expansion node-busboy node-camelcase
  node-caniuse-lite node-chownr node-chrome-trace-event node-ci-info node-cjs-module-lexer
  node-cli-boxes node-cli-cursor node-clone node-collection-visit node-color-convert
  node-color-name node-colors node-commander node-commondir node-concat-stream
  node-console-control-strings node-convert-source-map node-core-js node-core-js-pure
  node-core-util-is node-data-uri-to-buffer node-decompress-response node-deep-is
  node-defaults node-define-property node-delegates node-depd node-diff
  node-electron-to-chromium node-encoding node-end-of-stream node-err-code node-error-ex
  node-es-module-lexer node-escape-string-regexp node-eslint-utils
  node-eslint-visitor-keys node-esquery node-estraverse node-esutils node-events
  node-fancy-log node-fast-deep-equal node-fast-levenshtein node-fetch node-find-up
  node-flatted node-foreground-child node-fs-readdir-recursive node-fs-write-stream-atomic
  node-fs.realpath node-function-bind node-get-caller-file node-get-stream node-get-value
  node-glob node-globals node-got node-graceful-fs node-growl node-has-flag
  node-has-unicode node-has-value node-has-values node-hosted-git-info node-iconv-lite
  node-ieee754 node-iferr node-imurmurhash node-indent-string node-inflight node-inherits
  node-ini node-interpret node-ip node-ip-regex node-is-arrayish node-is-binary-path
  node-is-buffer node-is-descriptor node-is-extglob node-is-path-cwd node-is-plain-obj
  node-is-plain-object node-is-stream node-is-typedarray node-is-windows node-isarray
  node-isexe node-isobject node-js-tokens node-json-buffer node-json-parse-better-errors
  node-json-schema node-json-schema-traverse node-json-stable-stringify node-jsonify
  node-jsonparse node-kind-of node-levn node-loader-runner node-locate-path
  node-lodash-packages node-lowercase-keys node-lru-cache node-map-visit node-memfs
  node-merge-stream node-mimic-response node-minimatch node-minimist node-minipass
  node-mute-stream node-n3 node-negotiator node-npm-run-path node-object-inspect
  node-object-visit node-once node-optimist node-optionator node-osenv node-p-cancelable
  node-p-limit node-p-locate node-p-map node-pascalcase node-path-dirname node-path-exists
  node-path-is-absolute node-path-is-inside node-path-type node-pify node-pkg-dir
  node-postcss-value-parser node-prelude-ls node-process-nextick-args
  node-promise-inflight node-promise-retry node-promzard node-prr node-pump node-punycode
  node-quick-lru node-randombytes node-read node-readable-stream node-rechoir
  node-regenerator-runtime node-regenerator-transform node-regexpp node-regjsgen
  node-repeat-string node-require-directory node-require-from-string node-resolve
  node-resolve-cwd node-resolve-from node-restore-cursor node-resumer node-retry
  node-run-queue node-safe-buffer node-serialize-javascript node-set-blocking
  node-set-immediate-shim node-shebang-command node-shebang-regex node-shell-quote
  node-signal-exit node-slash node-slice-ansi node-source-list-map node-source-map
  node-spdx-correct node-spdx-exceptions node-spdx-expression-parse node-spdx-license-ids
  node-sprintf-js node-ssri node-stack-utils node-string-decoder node-strip-bom
  node-supports-color node-tapable node-terser node-text-table node-through
  node-time-stamp node-to-fast-properties node-tslib node-type-check node-typedarray
  node-typedarray-to-buffer node-undici node-unicode-canonical-property-names-ecmascript
  node-unicode-match-property-value-ecmascript node-unicode-property-aliases-ecmascript
  node-unset-value node-uri-js node-util-deprecate node-uuid node-v8flags
  node-validate-npm-package-license node-wcwidth.js node-webpack-sources node-wordwrap
  node-wrappy node-write-file-atomic node-xtend node-y18n node-yallist node-yaml
  nodejs-doc xbitmaps
Use 'sudo apt autoremove' to remove them.
The following additional packages will be installed:
  libcanlock3 libuu0
Suggested packages:
  slrnpull
The following NEW packages will be installed:
  libcanlock3 libuu0 slrn
0 upgraded, 3 newly installed, 0 to remove and 6 not upgraded.
Need to get 608 kB of archives.
After this operation, 2066 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://archive.ubuntu.com/ubuntu noble/universe amd64 libcanlock3 amd64 3.3.0-1build1 [16.4 kB]
Get:2 http://archive.ubuntu.com/ubuntu noble/universe amd64 libuu0 amd64 0.5.20-14 [60.3 kB]
Get:3 http://archive.ubuntu.com/ubuntu noble/universe amd64 slrn amd64 1.0.3+dfsg-6ubuntu1 [532 kB]
Fetched 608 kB in 2s (316 kB/s)
Preconfiguring packages ...
Selecting previously unselected package libcanlock3:amd64.
(Reading database ... 118885 files and directories currently installed.)
Preparing to unpack .../libcanlock3_3.3.0-1build1_amd64.deb ...
Unpacking libcanlock3:amd64 (3.3.0-1build1) ...
Selecting previously unselected package libuu0.
Preparing to unpack .../libuu0_0.5.20-14_amd64.deb ...
Unpacking libuu0 (0.5.20-14) ...
Selecting previously unselected package slrn.
Preparing to unpack .../slrn_1.0.3+dfsg-6ubuntu1_amd64.deb ...
Unpacking slrn (1.0.3+dfsg-6ubuntu1) ...
Setting up libuu0 (0.5.20-14) ...
Setting up libcanlock3:amd64 (3.3.0-1build1) ...
Setting up slrn (1.0.3+dfsg-6ubuntu1) ...
Processing triggers for man-db (2.12.0-4build2) ...
Processing triggers for libc-bin (2.39-0ubuntu8.6) ...

インストールされたバージョンを確認する。

slrn --version
slrn 1.0.3
S-Lang Library Version: 2.3.3
Operating System: Linux

COMPILE TIME OPTIONS:
 Backends: +nntp +slrnpull +spool
 External programs / libs: +canlock +inews +ssl +uudeview +iconv
 Features: +decoding +emphasized_text +end_of_thread +fake_refs +gen_msgid
    -grouplens -msgid_cache +piping +rnlock +spoilers -strict_from
 Using 64 bit integers for article numbers.

DEFAULTS:
 Default server object:     nntp
 Default posting mechanism: nntp

設定と起動

slrn を利用するには、接続するNNTPサーバー(ニュースサーバー)を指定する。環境変数 NNTPSERVER を設定するのが一般的となる。

例えば、プロバイダや契約しているニュースサーバーのアドレスを指定する。(例: news.example.com

export NNTPSERVER=news.example.com

もし、無料で試せるサーバーを探している場合は、Eternal September などが有名。 サーバーを指定した状態で起動する。初回起動時に -f オプションを指定してグループ情報を取得することもできる。

slrn

または、設定ファイル ~/.slrnrc を作成してカスタマイズすることも可能だ。デフォルトの設定ファイルを作成するには以下のコマンドを実行する。

slrn --create

これにより、カレントディレクトリに .slrnrc という名前で設定ファイルのテンプレートが作成される。これをホームディレクトリに配置して編集する。

mv .slrnrc ~/.slrnrc

トラブルシューティング

起動時に以下のエラーが表示される場合がある。

Loading /usr/share/slrn/slang/slrn.sl
Reading startup file /etc/news/slrn.rc.slrn fatal error:
Unable to find a valid hostname for constructing your e-mail address.
You probably want to specify a hostname in your .slrnrc file.
Please see the "slrn reference manual" for full details.

これは完全修飾ドメイン名(FQDN)が取得できない環境などで発生する。 この場合、~/.slrnrc ファイルにホスト名を明示的に設定することで回避できる。

# ~/.slrnrc に以下を追記(任意のホスト名で可)
set hostname "localhost"

おわりに

使ってみたけど、今だともっと便利なものがあるので使うかも…?って感じだった。

Hugo で構築されています。
テーマ StackJimmy によって設計されています。