Linuxデスクトップが使えないというのなら、知識を授けるのは私の使命だから

齋藤貴義さんのブログが誤謬満載だったので、突っ込んでみる。

e-Taxが使えない

そんなことはない。 実際私e-Tax使っているし。

Blu-Rayの再生が難しい

日本における法的な意味ではやや難しいが、実用的な意味ではそれほど難しくない。 日本の法的にも再生自体を禁じるものはない。 普通にlibblurayで再生もできる。

すごく単純に言えば、lubbluerayを用意しておけばmplayerで再生できる。

地上波デジタルの視聴が難しい

まぁ、それはそうなんだけれども、パソコン上でテレビを見なければならない必然性と、そもそもテレビの必要性からいってそんなに重大なことなんだろうか。 ましてLinuxerにとって。

ハイバネート設定が難しい

難しいのはディスクを暗号化した場合と、swapを切らなかった場合だ。 そうでなければインストーラがよきにはからってくれる可能性は高い。

ただし、うまく復帰できないケースはあまり少なくない。 このようなケースにおいて設定によって改善できる場合もその設定を行うのはかなり難しい。

省電力設定が難しい

メーカー製PCの場合、プリセットが充実していたりするので、多分それのことをいっているのだろう。 そんなものはないが、別に対して難しくもない。せいぜい細かに設定できる程度の話だ。

最も細かく設定できるのは恐らくKDE Plasmaだが、それでも項目自体はThinkVantageによるものと大差ない。 プロファイル切り替えに関してはアクティビティを使うのが楽。

輝度設定キーが動かない

輝度設定用のキーはXF86XK_MonBrightnessUp及びXF86XK_MonBrightnessDownとして定義されている。 XFキーが動かないというのはどういう状況なのかわからない。モダンなデスクトップを使え。

タッチパネルをオフにできない

タッチパネルをオフにする必要があるのか?タッチパッドのことか?

タッチパッドの制御に関しては、Linux版のSynapticsドライバーのほうがWindows版のものよりも細かに制御できる。 タッチパッドをオフにするためのオプションはSynapticsのみならばlibinputにすら存在する。 まだ現時点ではlibinputという選択肢はハードなので、Synapticsは単純に無効にするには

synclient TouchpadOff=1

でいい。

プリンタやスキャナの設定が難しい

最近はFoomaticも充実してきたし、特に困ることはなくなった。 以前はプロプライエタリドライバでないと動作しなかったMP630も最近はFoomaticに含まれている。 現在はPhotosmart-6620seriesでFoomatic+hplipできちんと動作している。

細かな制御、が何を意味しているかわからないが、縁無し印刷や両面印刷もできているし、ミリ単位の修正も一応できる。 インク残量もちゃんと見える。

ただし、ドキュメントスキャナに関しては、紙のサイズの自動判別ができないため、Windowsでやったほうがいい。

スマホとの同期が難しい

同期というのが何をさしているのかわからないが、特になにかができないと感じたことはない。 というか、adbを簡単に叩けるのだから簡単ではないか。それともiPhoneなのか。

デスクトップ環境のUIがイマイチなのが多い

好みの問題だと思うけれど、じゃあWindows 10のあの腐ったUIが良いのか?

私はCinnamonを使っているが、非常に快適である。何の問題もない。 KDE Plasmaは流儀が少々Windowsとは異なるが、十分なパワーがあり、使いこなすことができれば極めて快適だ。

NTFSやHFS+の書き込みに設定が要る

何を言っているのかわからない。

NTFSに関しては、普通はntfs-3gで読み書きするだろうし、設定なんか全く必要ない。 それどころか、NTFSに対する操作のためにLive Linuxを使うことすらある。

ただし、設定はいらないにしても、NTFSの操作にはやや問題はある。ファイルシステムのエラーを発生することが多いのだ。

HFS+が使えないということも聞いたことがない。

サウンドやカメラの詳細設定が難しい

最近はほとんどのサウンドカードやWebカメラが動くけど

それは嘘だ。動かないものは動かない状況は変わっていない。

だが、動くものに関しては設定というのが何をさしているのかわからないが、別に難しくもなんともない。 PulseAudioであればWindowsではとても考えられないような複雑な操作も可能だ。

もちろん、DTM用のオーディオインターフェイスのような設定は難しいが、常識的な範囲での(Windowsの一般的なユーティリティレベルでの)設定はより細かに、容易にできる。 イコライザなんかの話をしたいのかもしれないが、PulseAudio Equalizerというものがあるよ、と教えてあげよう。

Bluetoothデバイスの一部でペアリング出来ないものがある

これは経験がない。Bluetoothアダプタ自体が動作しなかったことならある。

ブラウザで閲覧できないサイトがある

UserAgentをホワイトリストで許可しているサイトの場合、推奨ブラウザでアクセスしても閲覧できない場合がある。UserAgentを書き換えてアクセスし直す必要がある。

これはLinuxの問題ではなく、サービス提供者の性悪さによる問題だし、それくらい対応しろよと思う。

IMEで良いものが少ない

Atokの大分昔のものは動くけど、基本はMozcなどで頑張るしか無い。拡張辞書必須。

現在のAtokが他と比べて快適なのか、ということ自体に疑問があるけれども、Mozcに何の不満があるのだろう。

Mozc Neologd UTまたはMozc UT2の場合、辞書の収録数はGoogle日本語入力よりも上であったはずだ。 なんならウェブ変換エンジンを利用することも可能なので、別に変換精度自体は劣るということはない。 まぁ、実際のところ語彙の問題ではなく、Google日本語入力には劣る面もあるのだが、取り立てていうほどのことはない。

最近はMS-IMEが大変に快適な変換をしてくれるように大変身したので、その意味では辛いものがあるかもしれないが。

なお、そもそもMozcはIMEではなくて、かな漢字変換ソフトウェアである。 IMEというのは、FcitxやiBusなんかのことだ。

KindleアプリのLinux版が無い

そんなことを言ったらMac版もない。

それでWINEで動かすことにどれほどの支障があるのかというのは疑問。 WINEが嫌いか?敗北感でも感じるのか?

Evernote公式アプリのLinux版が無い

公式に説明がある

つまり、公式アプリでないことをEvernote側で受け入れており、そもそも公式クライアントであることに意義はない、ということだ。

LINEアプリのLinux版が無い

wineで動かすしかない。

そもそも4.8, 4.9に関してはwineで動作させることができなかった。

Linux上でLINEを動かす方法としては、Chromeアプリ版(先があまりないが)と、libpurpleによる非公式版がある。

いずれも通話できないといった意味で完全ではないが、最低限動作はするはずだ。

画像編集ソフトが限られる

GIMPで大体のことはできるけど、PhotoshopやSketchのようなソフトは使えない

Windows向けの特定ソフトウェアが使えないことを嘆くのは不毛極まりない。

RAW現像手段も限られる。

yaourtでrawと検索すると309件、「raw image」でも43件ヒットした。

SteamがUbuntu版しか提供されていない

Manjaro Linuxではデフォルトインストールであり、PCLinuxOS及びMageiaでも導入可能。

SlackアプリがFedoraかUbuntu版しか提供されていない

AURにある。

Gitクライアントで良いものが無い

Windows版Gitクライアントは基本的にgit guiと同等のものではないか。 これが快適だとはどんなにがんばっても思えないが。

他にもまぁまぁあるが、Zshより快適なGit環境はそもそもないと思う。

入力デバイスの操作がイマイチ

全く意味がわからない。 入力デバイスの操作はハードウェア的なものでLinux関係ないと思うが。

マウス系のホイール操作はエミュレート精度が

解釈可能な日本語でお願いしたい。

ちなみに、Qt環境では驚くほど滑らかなスクロールが可能で、 さらにタッチパッドの場合はLinux版Synapticsのサーキュラースクローリングの快適さはWindowsになくて苦痛になるものの代表格だと思っている。

それともボタン3クリックの話をしているのだろうか? それであるならばArch wikiに多くの情報がある。

Discord Webhook + curlでスマホに通知してみる(LINE Notifyもあるよ)

IFTTTに近いかもしれないが、特定の条件で発生するアクションを作ったのだが、Linuxコンピュータで処理しただけでは外出中に気づくことができない。 そこでスマホに通知する方法が欲しくて考えた結果、もっとも適切そうなのは、DiscordのWebhookを使うというものだった。

通知までの考え方

一般には次のような流れになる

  1. 検証すべきデータを取得する
  2. データを解析する
  3. 条件を満たす場合にhookを実行する

データ取得、解析は、例えばウェブスクレイピング。次の例では特定のページが最終取得時と変更されているかをチェックする

getfunc() {
  curl 'http://journal.reasonset.net/' > ~/tmp/new.page.html
}

checkfunc() {
  if cmp ~/tmp/new.page.html ~/tmp/old.page.html
  then
    return 0
  else
    rm ~/tmp/old.page.html
    mv ~/tmp/new.page.html ~/tmp/old.page.html
    return 1
  fi
}

ここでhookさせるべきときに1を返すのは、whileで処理しやすいようにするためである。

データの解析までは通常ひとつづりで行われるため、まとめてしまって構わない。 Ruby + Nokogiri + Capybara + Poltergeistという構成でスクレイピングする場合もあるだろう。

また、twによってツイッターの投稿をチェックしたり、IMAPメールボックスをチェックしたり、あるいはfetchmailで受信したメールをフィルタするという方法もあるでしょう。

hookについては、次のようなものが考えられます。 まず、通知を表示する。

notify_hook() {
  notify-send "$1"
}

音を鳴らす。SOXを使うか、mpvを使うか、aplayを使うか…など選択肢は多いのですが、ここではSOXを使うことにしましょう。 音が鳴り終わるまで止める必要はないので、バックグラウンドで

notify_hook() {
  play "$1" &
}

ダイアログを表示する。Zenityの場合、制御端末が存在していると、制御端末ウィンドウがアクティブにならないとダイアログが表示されないため、ここではYadを使います。

notify_hook() {
  yad "$1"
}

コマンドを実行する。hookが起動された時点で実行したい内容があれば書いておきます。

notify_hook() {
  tw --yes "HOOKされたよ!"
}

スマートフォンに対する通知

Linuxコンピュータの前にいればユーティリティを自在に書くことのできる我々は全能感にすら浸ることができる。 だが、残念ながらLinuxコンピュータで優れたスクリプトを書いていたとしても、それはLinuxコンピュータに触れていなければ十分に発揮することができない。

そんな外の世界をつなぐのがスマートフォンの存在だ。 スマートフォンが注意をひきつけてくれれば何かしらの対応が可能だろう。

最も簡単な方法はメールではないだろうか。昔からよく使われていた方法だ。 現在もその方法は有効であり、例えばMailxを使ってメールを送ることもできる。 次の例ではMailxは設定済みであるか、もしくはlocalhsotに有効なMTAがあるものとする。

notify_hook() {
  echo "Hookされました" | mail -r "notification@localhost.localdomain" -s "Hooked notification" mms@example.com
}

だが、今時MMSなんか使っていないというHackerも多いのではないだろうか。 GMail宛に送るという方法もあるが、GMailで大量のメールをもらっているからあまり参考にはならないという人も多いはず。

ではインスタントメッセンジャーについて検討してみよう。

Facebook Messangerはfb-messanger-cliやMesserなどがあるが、自分自身に送るためのハードルが高すぎるため現実的ではないだろう。

Google Hangoutsはhangupsによってコマンドラインからの送信が可能だ。 ただし、Pythonスクリプトで書く必要があり、それなりに複雑だ。事前準備もある程度必要で、bot用アカウントを作成しておかなければ自分自身には送れないという意味でハードルは高い。

SkypeもSkype4pyによってコマンドラインから利用が可能だが、問題はHangouts同様である。 最近はSkypeアカウントの認証は厳しいし、サードパーティクライアントに対して非常に厳しい対応をとっていることを考えるとより難しいだろう。

以外にもLINEは現実的な処理が可能だ。 LINE Notifyのマイページから登録を行い、トークンを取得する。 そして次のようにして送信するのだ([token]と[message]は適切に置き換える)

curl -X POST -H 'Authorization: Bearer [token]' -F 'message=[message]' https://notify-api.line.me/api/notify

有力な選択肢のひとつである。

SlackはBOTを作成することができ、簡単に通知することができるが、Slackの通知は安定しないため、すぐに気づきたい場合に見逃すかもしれない。

Discordを使う

LINEで通知できるのも素晴らしいが、Discordならもっと楽しい。

Discordはマルチプラットフォームであり、PC, Android, iOSで扱うことができる。 加えて、それぞれの端末にアカウントを分けることで電話番号のない端末を探したり、一斉に通知したりすることが可能だ。

しかも、LINEでは通知はすべてがまとめられてしまうが、これなら分類することもできる。 LINEにおいても自分のみが所属するグループを作ることで共有が可能だが、Discordのほうが共有も容易だ。 URIなどを端末間で共有したい場合の利便性も高い。

まずは準備をしよう。 各端末にアカウントを用意し(PCと共有のアカウントがあっても構わない)、自分(たち)用のサーバーを用意する。 そして各端末のアカウントを招待し、通知/共有に含めたい全アカウントを登録する。

これでgeneralを介してアクセス可能になったが、全てがまとめられてしまう状況には変わりない。 そこで、内容を適切に分割するようにチャンネルを作成しよう。

チャンネルをわけることで、そのチャンネルに対する内容を通知しなくていい端末は当該チャンネルの通知を切っておく、ということも可能になるる これにより内容によって端末に通知する/しないを選択可能だ。

ではいよいよWebhookを作成する。 チャンネルの設定に移動し、"Webhooks"を選択する。ここでWebhookを作成するとWebhookの名前とアバターを設定し、通知するチャンネルを選択、そしてURLが発行されるはずだ。 このwebhook URLに対してJSONをPOSTすることでbotとして発言させることができる。

Webhookに対して送れるJSONオブジェクトは次の通りだ。

Field Type Description Required
content string 2000文字までのメッセージ 1つのcontent/file/embeds
username string Webhookのusernameを上書きする false
avatar_url string デフォルトのアバターを上書きするURL false
tts bool trueならTTSメッセージとする false
file file contents 送信するファイル one of content, file, embeds
embeds array of embed objects 埋め込まれたリッチコンテンツ one of content, file, embeds

チャンネルは設定を上書きできないが、発言者の名前やアバターは上書きすることができる。 そのため、単一のWebhookでも種類の異なる通知をすることが可能だ。 (アバター変更するなら複数のWebhookを使ったほうが効率は良いだろうが)

curlを使って次のようにJSONを送信することができる。

curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"username":"J.R.H","content":"ホックされたよ!!!"}' 'https://discordapp.com/api/webhooks/koko-ni-hook-no-uri'

JSONがダブルクォートを必要とするため、変数展開したい場合は少し大変かもしれない。

ひとこと

LINEもDiscordも、ユーザーごと/チャンネルごと個別の通知音設定がほしい