Fedora」タグアーカイブ

Fedora 18 IBus Setting for Japanese

Fedora 18 にて iBus の設定を
Fedora 18 64bit Install (HDD)
時のようにして利用していたのだが何とも使いにくい。

Fedora 17 からだけどフォーカスが変わっても入力状態を保持するようになったのよね。
Alt+F2 時に日本語入力状態であると切り替えできずアルファベットを打ち込めない。

いや上記の場合は Ctrl+J でイケると最近気がついたのだが。

何より切り替えの反応が悪い、日本語を打っているつもりがアルファベットのままとか。
どうも入力ソースを切り替えしているのでタイムラグがあるようだ。
Fedora 17 までは切り替えは快適だったのに完全に改悪だ。

しかしどうやらコレも Ctrl+J で解決できるようだ。
Ctrl+J は入力ソースの切り替えではなく Anthy の設定変更なので素早い。

ならば。

anthy1

と Anthy のみにして英語ソースを削除、ちなみにフリーズしたw
切り替えショートカットも無意味なので無しにする。
後は設定ボタンを押して

anthy2

と英語キーボードなら Ctrl+space を追加。
日本語キーボードなら Zenkaku_Hankaku が使えると思う。
Ctrl+J を残すかどうかはお好みで。

後は再ログインすれば適用される。
これは快適、私的に入力切り替えでイライラしない環境になった。

文字入力可能状態でないと切り替えできなくなってしまったけどね。
日本語以外も使わなければいけない環境な人はご愁傷様です。

Fedora 18 GNOME Boxes

GNOME Boxes part 3
までに Fedora 17 の Boxes で作ったファイル

~/.config/gnome-boxes
~/.config/libvirt
~/.local/share/gnome-boxes

を HDD からコピーしたら Fedora 18 でも動いた。
相変わらずクリップボード共有もできずマウスホイールも動かずと不便。

もしかして…
と考えて以下のように設定 xml の tablet の項目をコメントアウト。

tablet_out

何も問題なく普通にマウスホイールでスクロールできてしまった。
ようするに入力デバイスがマウスなのにタッチパッドと認識していたのだと思う。
現実では筆者は無線 USB 接続のマウスを使っているのですけど。

<input type='mouse' bus='usb'/>

とすると何故かマウス統合が無効になり qemu がクラッシュしまくる。
マウス統合しないのはコレはコレで便利なので使いたいのだけど。
Ctrl+Alt で脱出、VM ware が同じだったかな?
クリップボード共有は今のところお手上げ状態。

さて。

Fedora 18 で標準採用になって Boxes との連携はどう進化したか。
実験で Fedora 17 をインストールしてみる。

boxes01

あれ、こんな項目あったかな?
とりあえず Customize.. ボタンを押し名前を f17 に変更して試してみよう。

boxes02

結果、ISO ボリューム名でファイルを作成することは変わらず。
仮想マシン一覧に出る名前が変わるだけだった。

images

インストールしてアップデートして再起動。
よし SE Linux のブロックは出ない、しっかり修正してくれていた。
ISO からインストールだと XML の書き換え必須なのは変わっていない。

あれ、3D のまま起動したのにあまりガクガクしないで動く。
compiz の Unity より clutter の GNOME3 のほうが圧倒的に軽いのは確かだが。
この程度なら 3D でも全然イケる、強制フォールバックしたほうが当然軽いけど。

もしかして Unity も軽く…やっぱりガクガクのままだった。

GNOME Boxes – YouTube

Aero も動くみたいだが実用はキビシイだろうな。
OpenGL や DirectX をエミュレートなんて無茶すぎ。
私はもう Windows は入れませんけど、だって全然使わないんだもん。

それよりマウスホイールが最初から問題なく使える。
設定 XML は同じだったのに書き換える必要は無かった。
ハードウエア認識方法が違うのだろうか。

ホスト OS とのクリップボード共有もできる。
もしかしたら Fedora 同士や Ubuntu 同士なら問題なく動くのかも。
Fedora で作ったアプリが Ubuntu で動くか確認するために仮想マシンを使いたい私は…

GNOME プロジェクトのアプリだから GNOME 同士だと相性がいいのは当然か。

とりあえず仮想 Ubuntu でマウスホイールが使えるようになっただけでも嬉しい。
Fedora 17 との違いチェックに HDD をつなぎ替えの手間が無くなったしね。

というかこれだけ使えるならもう VirtualBox はいらないや。
VirtualBox で仮想化した Xp と Vista も永眠してもらう。

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

それと LXDE 化だけだと GTK3 アプリの表示がおかしいので

sudo apt-get install lubuntu-desktop

で Lubuntu 化したほうがいい、Chromium も入るしね。
最初から Lubuntu ISO を選んだら GTK3 ライブラリは入るのかな?

1920x1080

GUI で色々設定したいなら Virt-manager を使ったほうがいいようだ。
ただ Boxes とは全然別のアプリなので仮想マシンの共用はできない。
というかコッチは管理者権限で起動するしイメージ作成場所も /var/lib だし。
同じ qemu-kvm なので手段はありそうだけど。

ちなみに Virt-manager は Python 製で Boxes は Vala。
Linux 使いは本当にこの2つの言語ばっかり使っているなと。

Fedora 18 localhost

Fedora 18 を簡単インストールした場合は host 名が localhost になっている。
localhost.localdomain だったかな、少し弄くった後なので。
ドメインはデスクトップ利用なら DHCP だから関係ないけど。

localhost

そういえば 17 まではインストール時に決めることができたので少し気になる。
別にかまわないならいいけど短い別名にしたほうが端末が使いやすい。
以下は f18 と変名する場合。

検索すると /etc/sysconfig/network に HOSTNAME=f18 等と追記すればいいとでるけどまったく関係無いようだ。
Fedora 17 のファイルを見るとたしかに HOSTNAME 指定があるのだけど。

実は[システム設定]→[詳細]→[デバイス名]を書き換えるだけで変わる。
まさかの GUI、/etc/hostname が連動して書き換わる。
管理者権限のファイルなのに何故なのかは知りません(汗

dname

これだけだと httpd で http://localhost が使えなくなる。
ローカルで PHP の動作確認等をしている人は少し困る。
しかたがないので /etc/hosts を書き換えるという強引な手を使う。

hosts

で再起動、ついでに http://f18/ でもアクセスできるようになった。
しかし Fedora 17 の /etc/hosts は localhost.localdomain のままでホスト名が変わり http://localhost が使えているので正しい方法では無いのだろうと思う。
でもデスクトップ利用ならコレで使えるからいいや。

追記

Fedora 17 では
/etc/sysconfig/network の HOSTNAME=
の書き換えだけで本当に変わるんだね。
つまり Fedora 18 は上記手段で正解だったみたい。

Fedora 18 etc…

# CapsLock を Ctrl に変更
gsettings set org.gnome.desktop.input-sources xkb-options "['ctrl:nocaps']"

# CapsLock と Ctrl を入れ替える
gsettings set org.gnome.desktop.input-sources xkb-options "['ctrl:swapcaps']"

知らなかった。
/usr/share/X11/xkb/keycodes/evdev
を書き換える必要すら無かったとは。

それと Nautilus でどうでもいいことに気がついた。

nautilus_file_move

ココで移動できちゃう、マジでどうでもいい!
ランチャを [Ctrl+クリック] するかメニューからで素直に2つ起動しよう。
ツリー表示が無くなったのもしばらく使っていたらなんか慣れてきた。

で、上記スクリーンショットを撮って、ついでに気がついた。
いつの間にかマウスカーソルが移動カーソルのままで撮影できるようになっている。
マウスカーソルは後から書き足す方式なのでどの状態でも通常の矢印表示になっていたのだが。
嬉しいような、地味すぎるような進化をしていた。

codec_install

Totem からデコーダーを入れられるようになったのかな?
もう全部入れてしまったので試せないけど。
ところでアップデート通知を適用したらこんなになった。

saikidou

なんか Fedora もすっかり Windows 7 臭くなってしまった。
再起動してもしばらく上記が表示されたままで困ったけどしばらくしたら消えた。
最新環境は色々みつけられて楽しいです、みんな Fedora においで。

Python with GTK3 and Gst 1.0

GStreamer 1.0 を PyGI で試してみた。
Seekbar は面倒くさいので付けていない、Play/Pause ボタンのみ。
動画ファイルをドラッグアンドドロップすれば再生できるサンプル。

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

import gi
gi.require_version("Gtk", "3.0")
gi.require_version("Gst", "1.0")

"""
    GdkX11   @ get_xid()
    GstVideo @ xvimagesink
"""

from gi.repository import GObject, Gst, Gtk, Gdk, GdkX11, GstVideo

class Player(Gtk.Window):
    """
        Simple DnD Video Player
    """
    def __init__(self):
        Gtk.Window.__init__(self)
        self.connect("delete-event", self.on_quit)
        # Status
        self.status = Gst.State.NULL
        # Video Area
        self.video_area = Gtk.DrawingArea()
        # Disable Double Buffered
        self.video_area.set_double_buffered(False)
        # Play/Pause Button
        self.button = Gtk.Button.new_with_label("Null")
        self.button.connect("clicked", self.on_button_clicked)
        # playbin
        self.player = Gst.ElementFactory.make("playbin", None)
        bus = self.player.get_bus()
        bus.add_signal_watch()
        bus.enable_sync_message_emission()
        bus.connect("message", self.on_message)
        bus.connect("sync-message::element", self.on_sync_message)
        # DnD
        dnd_list = Gtk.TargetEntry.new("text/uri-list", 0, 0)
        self.drag_dest_set(
                Gtk.DestDefaults.MOTION
                | Gtk.DestDefaults.HIGHLIGHT
                | Gtk.DestDefaults.DROP,
                [dnd_list],
                Gdk.DragAction.MOVE )
        self.drag_dest_add_uri_targets()
        self.connect("drag-data-received", self.on_drag_data_received)
        # pack
        vbox = Gtk.Box.new(Gtk.Orientation.VERTICAL, 0) 
        vbox.pack_start(self.video_area, True, True, 0)
        vbox.pack_start(self.button, False, False, 0)
        self.add(vbox)
        self.resize(640, 360)
        self.show_all()

    def on_drag_data_received(self, widget, drag_context, x, y, data, info, time):
        uris = data.get_uris()
        self.player.set_state(Gst.State.NULL)
        self.player.props.uri = uris[0]
        self.player.set_state(Gst.State.PLAYING)

    def on_quit(self, widget, data=None):
        self.player.set_state(Gst.State.NULL)
        Gtk.main_quit()

    def on_sync_message(self, bus, message):
        if message.get_structure().get_name() == "prepare-window-handle":
            xid = self.video_area.props.window.get_xid()
            imagesink = message.src
            #imagesink.props.force_aspect_ratio = False
            imagesink.set_window_handle(xid)

    def on_message(self, bus, message):
        t = message.type
        if t == Gst.MessageType.EOS:
            self.player.set_state(Gst.State.NULL)
            self.status = Gst.State.NULL
            self.button.set_label("Null")
        elif t == Gst.MessageType.ERROR:
            self.messagebox(message.parse_error())
            self.emit("delete-event", None)
        elif t == Gst.MessageType.STATE_CHANGED:
            status = message.parse_state_changed()[1]
            if status == Gst.State.PLAYING: 
                if not self.status == Gst.State.PLAYING:
                    self.status = Gst.State.PLAYING
                    self.button.set_label("Pause")
            elif status == Gst.State.PAUSED: 
                if not self.status == Gst.State.PAUSED:
                    self.status = Gst.State.PAUSED
                    self.button.set_label("Play")

    def on_button_clicked(self, widget, data=None):
        if not self.player.props.uri == "":
            if self.status == Gst.State.PLAYING:
                self.player.set_state(Gst.State.PAUSED)
            elif self.status == Gst.State.PAUSED:
                self.player.set_state(Gst.State.PLAYING)

    def messagebox(self, text):
        dlg = Gtk.MessageDialog(
                self,
                Gtk.DialogFlags.MODAL,
                Gtk.MessageType.ERROR,
                Gtk.ButtonsType.OK,
                text)
        dlg.set_title("Error")  
        r = dlg.run()  
        dlg.destroy()
        return r

if __name__ == "__main__":
    GObject.threads_init()
    Gst.init(None)
    Player()
    Gtk.main()

GdkX11 は xid を得るのに必要、GstVideo は DrawingArea に貼り付けるのに必要。
つまり音楽プレイヤーを作るなら別にインポートする必要は無い。

以前リンクしたところは GstPipeline に playbin をセットしていた。
けど普通に playbin 自体を GstPipeline として使えるということみたい。

expose_event が無くなったおかげか xid を得るのに一手間がいらなくなった。
アスペクト比を保持させない方法も PyGtk と同じだった。

STATE_CHANGED メッセージで再生中に Gst.State.PLAYING が延々流れてくるのだが…
PyGtk ではこんなだったかな、覚えていないや。

というか PyGtk と Gst 0.10 で作るのと全然変わっていなかったという。

GStreamer のバージョンが上がったメリットは今の私には解らない。
多分そのうち気がつくだろう、多分。

しかし fedora 18 で検索しても皆 GStreamer なんて一言も触れていない。
Nautilus でサムネイルできなくて皆阿鼻叫喚してるかと思ったけど実際の話メインで使っている人がほとんどいないってことなのね。

しかし今日だけで五回もフリーズした、早く安定しないかなぁ。