Cinnamon 3.0.1, Linux 4.6 RC4

Cinnamon 3

Manjaro Update 2016-04-26でCinnamonが3.0.1になっていた。リリースでは触れられていないけれど…

これで結構変わっていたので、ポイントを挙げておくと

  • ダイアログ表示がフェードイン/フェードアウトアニメーション追加
  • 警告音がぽこぽこに変更された
  • テーマ設定でコントロールがかなりの部分使えなくなった
  • Dropboxが0秒起動だとsystrayに入らなくなった
  • Mail.ruは自動起動でsystrayに入るようになった

ダイアログがフェードインするようになったのは非常にかっこいいが、Fcitxのサジェスト/プレエディットもフェードインするようになり、実用性が明らかに低下した。このあたりは開発者は意識しないのだろう。(Fcitxを使うようなことがないだろうから)

Cinnamonは機能はシンプル、特に設定項目は少ない。デスクトップエフェクトもほとんど選択できないし、ショートカットの設定も少ない。

だが、非常にツボを抑えた機能を持っている。

例えば、クイックタイルはシンプルにSuper+Cursorであり、現在位置を基準にしてタイルする。Super+Leftは非タイルなら左にタイルし、右タイルならフローティングする。

PAアプレットではサウンド出力先を一括で変更できる。この機能で変更した場合カスタマイズされた設定に戻すのが大変なので使用していないが。

他にも

  • ネットワークアプレットによる切り替え・切断が加担
  • ウィンドウのボタンは配置も任意に設定できる
  • ウィンドウコーナー機能もある
  • デスクレット機能
  • 拡張機能(ほとんど正常に動作しない)
  • 通知のオンオフ
  • サブメニューを持つsystrayアイテムはスライド式で階層化される

軽量で安定していることもあって(さらには高速でハードウェアアクセラレーションも使用することもあって)、本来はPlasmaを利用したいと思いつつ、Cinnamonから抜けられないのもこうしたことからだろう。

Linux 4.6 rc4

Linux 4.6 rc2においては、Godavariマシンでは問題がなかったものの、Nehalem-WSマシンでは

  • btrfsマウント時に大量のメッセージが表示される(RAID6のベンチマーク?)
  • シャットダウン時、dmなどが閉じられず電源停止に至らない
  • オーディオデバイスの入力が大量のノイズで埋もれる

といった問題が生じていた。

だがこれらはRC4で解決した

btrfs関連の修正も既に多く入っており、非常に期待できる。相変わらずのいい仕事だ。

JavaScriptなんて必要なら自分で書けばいいじゃない

JavaScript、特にJQueryを多用する人の中に、妙なプログラミングスタイルでありながら、それに文句を言う人が結構いる。有名所ではQiitaのコールバックを駆逐したいとか。

JavaScriptはメタプログラミングが容易なので、自分で好きにいじれよ、別にフレームワークに依存する必要もないだろう、と思う。

では、同記事の課題から。

$.get("hoge.txt", function(hoge){
    $.get("piyo.txt", function(piyo){
        console.log(hoge + piyo);
    });
});

$.getが非同期で第一引数のファイルを読み、第二引数の関数をコールバックとして呼ぶものであるらしい。
だが、$.getを使う前提であれば次のような関数を用意しておけばいい。

$my.gets = function(/ *** /) {
  var callback = arguments.pop
  var getfunctions
  var args = arguments

  if (arguments.length < 2 )
    return undefined

  getfunctions = function() {
    $.get(args.pop, callback)
  }

  while (args.length > 0) {
    getfunctions = function() {
      $.get(args.pop, getfunctions)
    }
  }

  getfunctions()
  return true

}

JavaScriptの無名関数はクロージャである。
外側にある同一のオブジェクトを参照することができるし、getfuinctionsに代入される無名関数に書かれたgetfunctionsは代入される前の時点のオブジェクトである。

あとは簡単

$my.gets("hoge.txt", "piyo.txt")

元記事はDRYに反するコードを連ねている。

メタプログラミング、リフレクション、ダックタイピング、そしてDRYを正しく意識を払えば、簡潔で美しいコードが見えてくるだろう。
上記の例はわかりやすさのために美しさを犠牲にした。

また、JavaScriptは配列も配列されていない。
例えば

a[0] = "Foo"
a[10000] = "Bar"

としたところで、10001個のメモリが確保されるのではなく、2個確保されるだけだし、

a.10000

のようにもアクセスできる。
lengthが問題にならないのであれば既存クラスにだって好きにいれて良い。
例えばHTML要素のオブジェクト(a Element)に対して

elem._param_src = foo

のようにしても構わない。
(Element要素などは元のプロパティが多いし、いつ新しく入ったプロパティとバッティングするかわからないので、その点を考慮した書き方をしたほうが良い)

どんなオブジェクトにも適用できるので、先の例も

$.get.seq = function() {
  / *** /
}

のようにすることもできる。こうした柔軟な発想も必要だ。

Xリモートログイン

うちにある練習機は、Pentium M 1.70GHz, 512MB RAM, 40GB SATA1 HDDという非力なラップトップだ。

一方、予備環境は32GB RAMを備えるGodavariマシンなので、明らかにそれを活用するのが正しい。
ただ、デスクスペース的にGodavariマシンの前に座ることができない。

そこで、リモートデスクトップでGodavariマシンを使いたいと考えた。

XDMCP

XDMCPは、昔からある「X serverを使ってリモートデスクトップ」。

ふたつのX serversを接続し、ターゲットのX Clientが描画する領域をXプロトコルで端末へ転送する。XDMサーバーは要求・操作を仲介する。

リモートデスクトップでリモートコンピュータに「ログインしたい」場合は最も簡単な方法として「ログインする画面から画面をとばしてもらえば良い」わけで、それを実現するのがXDMCPだと考えていいだろう。

LightDMでサーバーセットアップ

ものすごく単純な話で、/etc/lightdm/lightdm.conf

[XDMCPServer]
enabled=true
port=177

のようにする。

Manjaroは標準(XFceイメージ)ではLightDMを使用する。KDEイメージはKDMなので、あまり安定していないらしい。
LightDMが最善なもよう。

クライアント

XnestかXephyr。

なぜかログインできないというトラブルが多発したが、結局はXFceならログインできた。(最初はログインできなかった)

Xephyrのほうが使いやすい印象だ。なんといってもフルスクリーンが可能(-fullscreenオプション)。また、VNCと違い、端末側が解像度を指定できるというのもメリット。

$ Xephyr -query 192.168.1.17 -screen 1920x1080 -br -reset -terminate :1 -fullscreen

LightDMセッションにおいてのみ、キーボードがUSになっていた。

遅い

リッチな環境であるVNCやRDPよりもXクライアントひとつ飛ばすだけで重いときいてはいたが、画面全体を飛ばすXDMCPだと、1GbEでも動画再生はきつい。

セキュリティ

覗かれる、という問題は、SSH経由でのXDMCPは無理なようなので、どうしようもない。

その他の選択肢

NX

良好なパフォーマンスを得る方法として、NXが挙げられている。

NXはNoMachineのFreeNXが昔話題になったが、その後の選択肢としてはGoogleのNeatX、あるいはnxagentといったところのようだ。

AURを見ると、nx-allなど、OUT OF DATEフラグが立っているがFreeNXもあるようだ。

x2go

x2goは最近話題のようだが、XとSSHということなのだろうか。

VPS相手にできるようだから、パフォーマンスは良いのかもしれない。

Waylandの場合

Waylandはこうした機能がなく、リモートレンダリングサーバーがあれば良いとしているらしい。

X.OrgをWayland上で動かせば実現するけれども、新しく作りなよ、ということらしい。

Waylandは今どうなっているのだろう。