月別アーカイブ: 2013年1月

Fedora 18 64bit Install (HDD)

Fedora 18 正式版がやっと出た。
今回の目玉は私的には Nautilus がゴロッと変わったことと GStreamer が 1.0 になったこと。
他で見かけたのはインストーラが凄くなっているらしいし楽しみだ。

960MB って今回から DVD かい、まあとっとと落として DVD に焼く。
先日買った BD ドライブと Brasero で普通に iso を焼けた。

Live 起動、今回から Live にもログインが必要になった。
一つしか選択肢が無いしパスワードも不要だけど何故かある。

インストーラは凄い進化していてログイン直後でインストールを始めても日本語が選択できるように。
って Ubuntu はとうの昔からそうだったけど。
逆に何故かログアウトメニューが消えたので Live で日本語化するのに困る。

gnome-session-quit --logout

と Alt+F2 から打ち込んでプロンプトを出せばログアウトできるけどなんだかなぁ。

多分そのうちインストール画面の画像だらけの解説ページを作るトコが出るだろうけど正直 Live を立ち上げればアホでもインストール方法は解る、続行ボタンとかが角にあるので Full HD だと見つけにくいけど探せばある。
パーテンションを細かく切るとか LVM みたいな項目がなくなり超簡易になった感じ。
ただ既に OS が入っている HDD に上書きの場合は「空きがありません」とでる、続行すれば選択肢になるけどちょっと迷った。
Ubuntu ほど上手くは作っていないけど以前に比べれば確かに解りやすくはなっている。

自分のパスワード等は再起動後なのは以前と変わっていない。

さて終わったので起動、なんか凄く起動が早くなった気がする。
デスクトップに物が置けないのがデフォルトなのを変える気は無いようだ。
Gnome 3 の設定 (gsettings) – L’Isola di Niente

Libre Office なんてどうせ誰もツカワネェのに入っていやがる。
それより dconf-editor とか必須アプリを最初から入れてくれよ。

ちょっとまて、日本語切り替えができなくなっている…
英語キーボードを使っているからかもしれないけど。

[システム設定] を開く。
[地域と言語→入力ソース] から Anthy でない「日本語」を消す。
[キーボード→ショートカット→タイピング] の設定で [全角/半角] か [Ctrl+Space] を入れる。
で Windows みたく使える。

[Shift+Space] に設定できなくなった、Gedit のスニペット一覧表示は諦めるとするか。
ついでに選択ウインドウが無意味にカッコイイ。

anthy

さて Nautilus はやはり 3.6 でメニューバーが無くなってアプリケーションメニューになった。
アクティブ時にアクティビティの横をクリックするだけだがぶっちゃけ使いにくい。
というかショートカットキーがどこにも表示されないので新規で使う人は絶対に迷う。
ゴミ箱に捨てるには Ctrl+Delete とかがコレじゃ解らない。

nautilus_menu

ちょっとまて、サイドバーをツリービューにすることもできなくなっている。
時代の流れで階層を隠す方向なのだろう、慣れるしかないか。

ホームもドットディレクトリが凄く減っていて Linux も変わったなぁと感じる。
.gnome2 ディレクトリがついに消えた、Nautilus script はドコに入れるの?
~/.local/share/nautilus/scripts
というディレクトリを見つけたので入れみたら適用された、ヘルプに書いていない…

スクリーンショットがフォーカスがあってもキーボードが効かないんだが。
こんなに待たせておいて不具合多すぎワロタ。

210

出たばかりなのにコレかよ。
他のものをインストールする前にアップデートしよう。
[システム設定→詳細→更新を確認] って解りにくいぞ!

$ sudo yum update

と端末のほうが簡単。

ちなみにアップデートしないで RPM Fusion や Google Chrome をいれようとしたらコケた。

$ sudo yum remove パッケージ名

なんてコマンド久々に打ったよ。

Google Chrome はアプリ名で検索すれば普通に一番上になる、そりゃ Google だし。
wget と redhat-lsb を別個で入れないとインストールできなかったぞ。
Fedora 17 は普通にインストールできたのは偶然他で入っていたからなの?
Opera は必要になったら入れる、メーラーとしては使いやすいんだけど。

Configuration – RPM Fusion

RPM Fusion だが Graphical Setup から導入できなかった。
下のほうにあるコマンドを端末にコピペしたら普通に導入できた。
何日かしたら修正してくれると思うけど。

gst

さて GStreamer は事前情報どおり 0.10 と 1.0 が共存。
Totem や Nautilus はどちらを使うのかな。
しかし Fedora 18 は Totem に動画をドロップしてもデコーダーが入らないや。

リポジトリから gstreamer で検索。
ffmpeg,bad,ugly,nonfree とか付いているのをかたっぱしから入れてみる。
強制的にインストールとか出るけど気にしない!

すると Y901x で再生できるけど Totem では再生できない異常事態になった。
当然 Nautilus でサムネイルなんてされない、これでは困る。

gstreamer1-plugins-bad-freeworld
gstreamer1-libav

というのを入れてやっと Totem でも正常に再生できるようになった。
つまり 0.10 を使っている Y901x と違う、GStreamer 1.0 を使っているのね。

もう寝なきゃ。
とりあえず明日もう少し弄くってみます。

Python subprocess

何を今更だけど os.system や os.popen はもう「使うな!」なんだね。
17.1. subprocess ? サブプロセス管理 ? Python 2.7ja1 documentation

それどころか Python3 には commands が無い。
subprocess の使いかたを覚えておかなければ。

# command

import os
import subprocess

#os.system("gvfs-open hoge.txt")
subprocess.call(["gvfs-open", "hoge.txt"])

# With spaces in the file names
#os.system('gvfs-open "on space.txt"')
subprocess.call(["gvfs-open", "on space.txt"])

引数の最初が args だから list に全部入れなきゃだめってことみたい。
ファイル名にスペースがある場合に楽になった、ような…

それからえっと
os.system(“gedit &”)
みたいなバックグラウンド実行はどうするのかな。

# Background

#subprocess.call(["gedit", "&"]) # Error
subprocess.Popen(["gedit"])

Popen を選ぶだけみたい、ふむふむ。

でコマンドのアウトプットを得るには

# Get Output

#output = os.popen("pwd").read()
#output = commands.getoutput("pwd")
output = subprocess.check_output(["pwd"])

なるほど。

ということでこんなページを作ってみた。
Python Tips – L’Isola di Niente

でも結局 GLib を使ったほうが楽だったりして。
全部 Python でやることにこだわるなんて正直アホみたい。

from gi.repository import GLib

# Execute
GLib.spawn_command_line_async("gvfs-open hoge.txt")
# Get Output
result, output, error, status = GLib.spawn_command_line_sync("ls -l")
print output

Gtk+ DataBinding

明日から仕事始めなのでと覚書ページ書き換えラストスパート。
GtkSwitch を試していて困った。

GtkSwitch

activate シグナルがあるけど connect しても発行されない。
but use the notify::active signal.
なんて書いてあるから当然なんだけど、どう使うの?
さて今日も英語と格闘が始まるな。

Short Example of GSettings Bindings with Python using a Gtk Switch ? Mariano Chavero

なるほど、こうやって使うのか。
GNOME3 環境の人しか実験できないサンプルだけど on off でデスクトップアイコンの表示切り替えができるのを確認した。
しかも dconf-editor で切り替えたら GtkSwitch も切り替わる双方向。

つまり Widget のプロパティと GSettings はバインディングできるんだね。
それなら Widget 同士でもやれそうだと思ったので調べてみる。
というか GSettings のサンプルだと GNOME3 以外を使っている人には解らないし。

GBinding

g_object_bind_property という関数で Widget 同士のバインドもできそう。
PyGI で GObject.Binding 内を探すが見当たらない。

GObject-2.0 Python API Documentation

うーんココには有ると書いているんだけど。
って URL をよく見たら ubuntu-12.10 だ、つまり Fedora17 より新しい。
仮想 Ubuntu 12.10 を立ち上げ dir してみる。

bind_property

あぁやっぱり。
しかたがない、今は仮想 Ubuntu 上で試してみるか。

#!/usr/bin/env python
#-*- coding:utf-8 -*-

"""
    Widget Property Binding Sample
"""

from gi.repository import GObject, Gtk

switch = Gtk.Switch()
check = Gtk.CheckButton("Check")
GObject.Binding.bind_property(
        switch, "active",
        check, "active",
        GObject.BindingFlags.BIDIRECTIONAL )

hbox = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 0)
hbox.pack_start(switch, False, False, 0)
hbox.pack_start(check, False, False, 0)

w = Gtk.Window()
w.add(hbox)
w.connect("delete-event", Gtk.main_quit)
w.show_all()
Gtk.main()

widget_property_binding

GBindingFlags は
GObject.BindingFlags.DEFAULT では source 側からの一方向バインド。
GObject.BindingFlags.BIDIRECTIONAL で双方向になる。
他2つはよく解らない、上記2つあれば充分だし。

こんな感じでデータと GUI を結びつければ面白くなるね。
WPF の ObservableCollection みたくできるかも、アレは混乱の元だが。

しかし早く fedora 18 出ないか、今日サイトを見たら又伸びているんだが…

Fedora 17 BD-R

もうすぐ Fedora 18 が出る、導入するマシンの準備をしなければ。
Core i 何とかあたりに変えようか考えたけどまだ現 4 コア phenom は使えるし。
もったいないから壊れるまで HDD 取り替えのみで使うことにする。

でもかなり前から壊れている DVD ドライブだけはいいかげんに変えなければ。

ただ買い換えるだけでは面白くないので Blu-ray ドライブを買った。
検索すると普通に Brasero で書き込み Nautilus で観覧できるみたいなので。

とりあえず上記を買って壊れた LG の DVD ドライブと取り替える。
空の BD-R を入れると CD, DVD ディスク同様に自動マウント、うんうん。
早速 Brasero で書き込みしてみる。

brasero_error

なんだよ、トレイが勝手に吐き出されてコレだよ。

ログ

Checking session consistency (brasero_burn_check_session_consistency brasero-burn.c:1739)
Unsupported type of task operation
Session error : 内部エラーが発生しました (brasero_burn_record brasero-burn.c:2856)

エラーログの内容で検索すると当然のように海外しかヒットしない。
しかも Ubuntu ばかりだし症状が一致しない、Fedora のデスクトップ利用はメジャーでは無いと解っているがチョッピリ悲しい。
結局原因は解らない。

というか、日本語で検索しても再生のこと以外ヒットしない。
インストールと観覧しかやらないなら絶対に Windows のほうが便利だぞ。
書き込みできなくてもアプリに文句言えばいいだけだしね。

Ubuntu日本語フォーラム / ブルーレイディスクにデータを書き込むソフトウエアはありますか ?

日本語でまともなのが見つかるのはやはりココくらいなものか。
K3b ってので書き込めるみたい、面倒なのでコレ入れてみる。
なんかイッパイインストールされてしまったんだが、おまえは iTunes か!

growisofs を次 Fedora でも書き込めないなら試すことにしよう。
PyGI で GUI を作って os.system(str) なんてのを作れば充分そうだしね。
Brasero で問題なければいいわけだが。

まあとにかく書き込んでみる。
とりあえず全部デフォルト設定のままで合計約 20GB のデータを。

k3b_jp

12 倍速と書いているのに 2 倍速以上にはならないんですけど。
外付け USB HDD のほうがストレスが少ない、でも信頼性を考えると…
データ次第で使い分けすればいいことだが。

書き込み完了でエラー、コレは以前のドライブと同じだけどケーブルが悪いのか?
一旦取り出して再び挿入、Nautilus で普通に自動マウントされファイルが読める。
書き込み自体は問題なく行われたようだ。

ということで K3b は普通に BD-R 書き込みできます、困ったらコレ。

それよりこのドライブって恐ろしく静かだ。
試しに CD を聴いてみると本当に回っているのか不安になるくらい。
こういうのはやっぱり日本メーカーを選ばないと駄目だね。

********************

ついでに。
先月のことだけど二年使った Logicool M505 マウスが壊れたので電気屋へ。
たった千二百円の投げ売り Microsoft マウスを見つけたので思わず買った。
初めての Microsoft マウスだ、さあどうだ。

軽すぎて手に馴染まない。
ホイールのクリック感が皆無。
サスペンドがマウスを動かしただけで何故か復帰するように。
そのせいかアルカリ電池が一週間しか持たない。

そのうち慣れるだろうと一ヶ月我慢したけど限界だ!
特に電池は M505 は半年持っていたぞ!

少し大きめのほうががいいかなとやっぱりこの安い奴に買い換えた。
あぁ握り心地は最高だしマウスを動かしても復帰しないのがこんなに嬉しいとは。
もう絶対に割高でも Logicool 以外は買わないことにする。

Gtk SetForegroundWindow

年末年始の空き時間を使って覚書ページまとめと Tips 追加をやっている。
ついでに HDD 内の古いサンプルコードを整理。

ほぼ PyGtk コード、ほとんどもう役に立たない…
GTK3 には Pixmap なんてもう無いっつーのとか。
千以上あったけどやっと 2/3 くらいに減らした。

でも中には今まで気がつかなかったコードも見つかる。
多重起動防止でアプリを最前面にもっていく方法が今まで解らなかった。

gtk_window_activate_focus ()
gtk_window_present ()

どうやらこの二つを呼べばアクティブ化できるようだ。
以前書いた GtkApplication を使った Vala コードを書き換えて実験。

using Gtk;

/*
 * Prevent multiple window Sample
**/
public class TestWin : Window {

    private Notebook note;
    private TextView[] view;

    public TestWin ( Gtk.Application app ) {
        this.set_application ( app );
        this.set_title( "TestWin" );
        note = new Notebook ();
        this.add ( note );
        this.resize ( 320, 240 );
        this.show_all ();
    }
    public void CreateNew () {
        var tab_label = new Label ( "new.txt" );
        var text_view = new TextView ();
        view += text_view;
        note.append_page (text_view, tab_label);
        this.show_all ();
        // New Page Activate
        note.set_current_page ( view.length - 1 );
    }
    public void CreateTab ( File[] files ) {
        foreach ( var file in files ) {
            var tab_label = new Label( file.get_basename () );
            var text_view = new TextView ();
            view += text_view;
            note.append_page(text_view, tab_label);
        }
        this.show_all();
        // Last Page Activate
        note.set_current_page ( view.length - 1 );
    }
}

public class App : Gtk.Application {

    private TestWin win = null;

    public App () {
        Object (application_id:"apps.test.helloworld", flags:ApplicationFlags.HANDLES_OPEN );
    }
    public override void activate () {
        if ( win == null ) {
            win = new TestWin( this );
        }
        win.CreateNew ();
        // SetForegroundWindow
        win.activate_focus();
        win.present();
    }
    public override void open ( File[] files, string hint ) {
        if ( win == null ) {
            win = new TestWin( this );
        }
        win.CreateTab ( files );
        // SetForegroundWindow
        win.activate_focus();
        win.present();
    }
}

public class Main {
    public static int main ( string[] args ) {
        Gtk.init ( ref args );
        var app = new App ();
        app.run ( args );
        return 0;
    }
}

ついでに追加タブもアクティブにするコードも入れてみた。
うん、今のところこれでいけるようだ。
多重起動防止アプリ以外ではどうでもいいことなんだけどね。

コンパイルするの面倒くさいよ、早く PyGI で使えるようになってくれ。