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

GNOME MPV

実は先週から Fedora 26 の GStreamer で動画が再生できなくなっている。
設定は何一つ弄っていないので何かのアップデートが原因だろう。
Linux ではよくあることなので修正をのんびりまっていた。

ぶっちゃけ動画なんて 2017 年現在はほぼ Web ブラウザ上でしか見なくなったし。
来週には Fedora 27 が出るし、多分…

そんなこんなで今日になってやっと気が付いた。
再生できないのは H.264 だけだ。
モーション JPEG 等の昔撮影したデジカメ動画なんかは再生できるじゃん。
今って Web から落とす動画もデジカメ動画も全部 H.264 なんだね。

H.264 ファイルなら Firefox や Google Chrome にドロップすれば再生できる。
いやそれじゃ等倍でしか再生できないしろくな機能が無い。

せっかくの機会だし他の再生ソフトでも使ってみよう。
使うアプリが完全に固定されてしまっている現状もどうかと思うし。
検索してみると今は mpv というのが人気みたいね。

早速 dnf で入れてみたけど、うーん…
Wayland では DnD できないしキーバインドも変だし etc…

メディア プレイヤーは “mpv” で決まり!:ULCAMTCVSMPS:So-netブログ

Ubuntu 屋って F11 でフルスクリーンにならないとかが気にならないのかな?
GNOME と macOS を併用している筆者は Ctrl+Q(command+Q) で終了しないアプリを試しただけでイラッとするんだが。
カスタマイズじゃないんだよ、デフォルトがそうでないとおかしいんだよ。
OS のデフォルトにカスタムして合わせるってそれ違うだろ!

そのてん Visual Studio Code なんかは見事だ。
Linux 版は F11 でフルスクリーンだし macOS 版はウインドウを閉じても終了しない。
アプリケーションの美学と筆者が勝手に思っていることを当然のようにやっている。
それなのに自社の OS では何故こういう統一感が無いも同然なのか?
…ってそれは別の話で。

そんなことよりオンスクリーンコントローラーが気に入らない。
常にシークバーは表示のほうがいい、Youtube みたいに。
で探したら gnome-mpv って mpv のフロントエンドがあるじゃん。

GNOME MPV

当然のように dnf で導入できる。
常にシークバーは表示されている。
Wayland でも問題無し、GTK3 だからあたりまえだけど。
Ctrl+Q, F11 も最初から使える、F9 でプレイリストも GNOME っぽい。
いらない機能満載だけど軽いからどうでもいいや。
おまけにプレイリストは右に出るwwwwwwwwwwwwwwwwwwwwwwwwwww

再生開始で動画サイズにリサイズされるのが今となってはウザい。
でもプレイリストでの切り替え時は固定される eog 式なのでゆるせる範囲。

これはイイ、もう筆者は作る必要が無いな。
でも nautilus でサムネイルできないのが痛い、そのうち直るのだろうか?

gvfs-open to gio open

Fedora 26 では gvfs-open が非推奨になっていた。

man gio で見ると gvfs-*** コマンドが全部まとめられたようだ。
ぶっちゃけ xdg-*** だけでイイじゃんみたいなものだったし。
UNIX らしくないかもだけど筆者はコッチのほうがいい。

gvfs-open と同じなんだけど少し違うようだ。

Nautilus Window を開いた状態でないとパス名を開けない。
Gedit Window を開いた状態でないとテキストファイルを開けない。

http://localhost/ や画像なんかは普通にデフォルトアプリが立ち上がる。
自作アプリにデフォルトを変更した動画や CBZ も自作アプリが立ち上がる。

多分バグではなく仕様だと思うんだけど、よくわからない。
とりあえずウインドウを開いておけば今迄どおり使えるってことで。

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!