Linux」カテゴリーアーカイブ

Fedora 26 Upgrade

Fedora 26 への更新通知が来ました。
ぶっちゃけ筆者は最新の GTK+/Clutter が使えればいいのであって。
むしろ検証に時間を掛ける Fedora は不向きだと本気で思っていたりする。
でも十年後も残っていそうなトコって Fedora, SUSE, Slackware しかないし。

前回は RPM Fusion 絡みで上手くいかなかったので現時点での構成でも。
UnitedRPMs リポシトリと
Google Chrome リポシトリのみ追加
GNOME 自体の設定は全部デフォルト、サルブンツのアレ等と違ってデフォルトでも快適。
って、あんまり参考にならないと思うけど。

今回は普通に gnome-softwere からイケるようだ、ヤッタぜ。
ボタンは [ダウンロード(D)] のほうをクリック。

ダウンロードが終わると [インストール(I)] ボタンが出る。
押してルートパスワードを入力すると再起動。

通常のアップデートとほぼ変わらない感じで進んでいく、筆者の環境で約十分。
自動再起動の後で普通にログインすると Fedora 26 になっていた。
あっけなさすぎて唖然、もちろんイイ意味で。
macOS や iOS 更新に掛かる時間は何なんだ!

UnitedRPMs で入れた GStreamer codec も更新されている。
特にバックアップとかしなかったけどデフォルトアプリの変更等もそのまんま。
Apache の systemctl 指定や SELinux の変更点もそのまんま。

あれ? Gedit が 3.22 のままだ。
Wayland でログインすると Ctrl+F9 が使えないまんまだ、期待したのに。
eog は拡縮のパーセント表示が付いた、他のアプリは何が変わったかワカラン。
dconf-editor 3.23.4 ってこのバージョンは何よ。

GNOME 3.24 Release Notes

GNOME 関連は前回同様に日本語ページは無いようなので英語で確認。
ずっと使ってきた人はアイコンが変わったくらいしか感じないと思う。
GTK+ の大幅な変更は二年毎に変わったし GNOME アプリもメンテ程度っぽい。
よく見ると何故か翻訳されず放置されてきた部分がキッチリ日本語になっている。

ずっとクリーンインストールだったからかヤルこと無さすぎ、ツマラン(褒めてます)

Gjs VS PyGObject (Linux time command)

Linuxコマンド集 – 【 time 】 指定したコマンドの実行時間を表示する:ITpro

なんだよ、こんな便利なコマンドがあったのかい!
これで Python と Gjs の速度比較が簡単になる。

function printDateFormat(ms) {
    let date = new Date(ms);
    let s = date.getMinutes() + ":" + date.getSeconds() + ":" + date.getMilliseconds();
    print(s);
}

ってのを Gjs 用に考えたけどいらなかった。

てなわけで、早速 Gio.Subprocess で差が出るか確認してみよう。
前回のコードから不要な部分をバッサリ省いて。

#!/usr/bin/env python3

import gi
gi.require_version('GdkPixbuf', '2.0')
from gi.repository import Gio, GLib, GdkPixbuf

namelist = []
unzip_list = []

sp = Gio.Subprocess.new(["unzip", "-Z", "test.cbz"], Gio.SubprocessFlags.STDOUT_PIPE);
istream = sp.get_stdout_pipe()
dstream = Gio.DataInputStream(base_stream=istream)
while True:
    line, l = dstream.read_line_utf8()
    if line == None: break
    if line.startswith('-'):
        name = line[53:]
        if GLib.Regex.match_simple("\.(jpe?g|png|gif)$", name, GLib.RegexCompileFlags.CASELESS, 0):
            namelist.append(name)

for name in namelist:
    sp = Gio.Subprocess.new(["unzip", "-p", "test.cbz", name], Gio.SubprocessFlags.STDOUT_PIPE)
    stream = sp.get_stdout_pipe()
    p = GdkPixbuf.Pixbuf.new_from_stream(stream, None);
    unzip_list.append(p)
    stream.close()

Gjs で書き換えて。

#!/usr/bin/gjs

const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio;
const GdkPixbuf = imports.gi.GdkPixbuf;

let namelist = [];
let unzip_list = [];

let sp = Gio.Subprocess.new(["unzip", "-Z", "test.cbz"], Gio.SubprocessFlags.STDOUT_PIPE);
let istream = sp.get_stdout_pipe();
let dstream = new Gio.DataInputStream({base_stream:istream});
for (;;) {
    let [line, l] = dstream.read_line_utf8(null);
    if (line == null) break;
    if (line.startsWith('-')) {
        let name = line.slice(53);
        if (GLib.Regex.match_simple("\.(jpe?g|png|gif)$", name, GLib.RegexCompileFlags.CASELESS, 0))
            namelist.push(name);
    }
}

for (let i=0; i<namelist.length; i++) {
    let sp = Gio.Subprocess.new(["unzip", "-p", "test.cbz", namelist[i]], Gio.SubprocessFlags.STDOUT_PIPE);
    let stream = sp.get_stdout_pipe();
    let p = GdkPixbuf.Pixbuf.new_from_stream(stream, null);
    unzip_list.push(p);
    stream.close(null);
}

コレを time コマンドで比較。

って一秒すらも差が出ない誤差の範囲ジャン!
Gjs 版 Comipoli が異様に遅い原因は言語のせいでは無いことは判明した。

bash =~

sh では存在しないコマンドを打つとなんか調べてくれる。
あれは command-not-found というものが行っているらしい。

Linux入門はじめますた: おせっかいな「command not found」

Fedora 25 で調べると以下のバイナリだった。
/usr/libexec/pk-command-not-found

ハンドラの定義は set コマンドで見ることができる。
随分違うなぁ、まあ 7 年も前の記事ですし。

どっちにしろ無効にしたい場合はやることは同じ。
command_not_found_handle 関数を ~/.bashrc で上書き…

いやチョットまて?

=~ 演算子って何だ!!!

Man page of BASH

にて =~ でページ内検索でなんとか。
正規表現マッチってことみたい。

だけど上記関数は i という文字が含まれているかどうかだけだよな?
それなら単純に文字列が含まれているかどうかも解るかも。

おぉ、Python の文字列 in 演算子のように使えるジャン!
こんな便利な使い方が検索で全然出てこないのは何故だYO!

CB7

先日 gnome-autoar というのを見つけた。
けれどソースコードには肝心の圧縮展開を行うコードは無かった。

GitHub – GNOME/gnome-autoar: Automatic archives creating and extracting library

中身をよく見ると archive.h を include している。
どうやら圧縮展開は libarchive 依存のミドルウエアってことみたい。

てゆーか libarchive って今は 7z 圧縮に対応しているってことかYO!

libarchive – C library and command-line tools for reading and writing tar, cpio, zip, ISO, and other archive formats @ GitHub

でも CB7 を作っても Nautilus 上でサムネイルされない。
おいおいマジで圧縮展開だけなのかよ。

いや、コミックブックアーカイブって五種類もあったのね。
ACE なんて見たことが無いし TAR はコレだけだと非圧縮だし無視でいいと思うが。

Comic book archive – Wikipedia

Evince でも CBR, CBZ, CB7 の三つをサポートしているみたい。
だけど Evince はどうやら p7zip 依存のようだ。
それに 7z だと file-roller で開くことができない、こいつも同様か。

ということで、現状では p7zip を入れておかないと色々不便だ。

sudo dnf install p7zip

United RPMS は unrar はあるけど rar は無いことに今頃気が付く。
コイツは削除して RARLAB のを自分で入れる。

よし3形式ともサムネイルとプレビューができるようになったぞ。
Evince, file-roller も対応、後は我がアプリ。
CBR と同じ方法でイケた、つーことで更新。

結局 gnome-autoar はどうでもよかった。
サムネイル表示されないのではビューアを作っても虚しいもんね。

file-roller command

忘れるところだった。
以前のように形式自由でアーカイブ可能な Nautilus Script を作らないと!

筆者は「新しくなったことを全否定する老人は死ね」な人間である。
でも今回は否定させて、だってデフォルトの機能では tar.gz が無いんだ。

7z なんて Kivy がソレで配布されていて mac でスゲー困ったし使いたくない。
GNOME はあの3形式以外は使ってほしく無いのかもだが流石に無理。
サルな人はすぐ昔のバージョンに戻そうとする、筆者は作る。

でも多数のアーカイブ形式に対応するって大変そう。
と思うけど実はもうソレをやっているものがあるんです。
file-roller はコマンドとして使えます。

file_roller

–add-to オプションで拡張子を指定すれば自動判別でアーカイブしてくれる。
ということでこんなシェルスクリプトを、拡張子のとうりな形式になります。

#!/bin/sh

path=`pwd`
name=${path##*/}
file-roller --add-to="${name}.tar.gz" "$@"

で。
Nautilus Script にコピーして送ってみる。

targz

これだけでで半角スペース及び日本語に対応。
以前と同じく親ディレクトリ名でアーカイブされる。

コレを Gjs なんかを使って GUI を以前みたく作って実行させればいい。
と思ったけどなんかコレで充分な気がしてきた。
Comipoli もやんなきゃいけないし、後は気が向いたら。

追記

下記だけで以前のダイアログが出せる、何を今頃だけど。

#!/bin/sh
file-roller --add "$@"