Fedora」タグアーカイブ

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 でサムネイルできなくて皆阿鼻叫喚してるかと思ったけど実際の話メインで使っている人がほとんどいないってことなのね。

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

Fedora 18 64bit Install (HDD) part2

Nautilus はブックマークの保存場所も変わっていた。

~/.gtk-bookmarks があるけど書き換えしてもが読み込まない。
~/.config/gtk-3.0/bookmarks を読み込むようだ。

なら PCMan とかのツリー表示が可能なファイルマネージャを別個で入れても安心。
こいつ FTP ができないからって登録したのを削除しやがるもんな。

ログアウトメニューが無いのはやはり不便。

scut

こんなのを見つけたけど Ctrl+Alt+Delete は「電源オフ」だよ!

GUI では logout コマンドが使えないし困った。
海外を探すとエイリアスを作る方法が見つかったけど Alt+F2 で使えない。
しかたがないのでこんなコマンドを作って ~/bin に放り込んでみた。

#!/bin/sh
# logout alias
gnome-session-quit --logout --no-prompt

これで Alt+F2 からでもログアウトできる

Nautilus は変わったとはいえ freedesktop.org 準拠の部分はやはりそのまま。
あらかじめ標準ディレクトリにしたいディレクトリをコピー又は作成しておき
~/.config/user-dirs.dirs を書き換えて上コマンドでログインしなおせば。

nautilus36

こんな感じで結構使うのにログアウトメニューは何故消したのだろう。

他は…

Python3 はデフォルトで入らないのか、どこかで入ると見た気がするのだが。
gcc はデフォルトで入らず gjs と seed はある、何も変わっていなかった。

VL ゴシックのプロポーショナルが相変わらず入っていない。
日本なんて全然気にしていないのね、入れなきゃ日本語サイトの大半が笑える状態。

サスペンド復帰が失敗しまくるのだがそのうち修正してくれると信じよう。
Alt キーの動作を逆にしたのはそういう要望が多かったのかな。

Fedora も GTK2 と GTK3 の見た目を同じにする方向みたい。
非アクティブ時に Widget の文字列等が薄くなるなら GTK3 と一応見分けが可能。

# GTK+

解り辛いけど GtkScale や GtkScrollbar の動作が変更になっている。
トラフでない部分をマウスでクリックした場合

Fedora17 以前
左ボタンで少しずつトラフが移動、中ボタンならトラフ完全追従

Fedora18
左ボタンでトラフ完全追従、中ボタンは無視

GTK2 の Firefox と GTK3 の Gedit のシークバーで試せばすぐ解るよ。
やはりタッチパネルを意識したのだろうか。

Totem の GtkHScale はどのボタンでも追従するようになっているし。
私が作った Y901x は全部中ボタンと認識する仕様なせいかシークバーが動かないw
おいおい GTK2 の GtkScale まで動作まで変えないでくれよ。

おまけに GtkAspectFrame が白くなる現象が。
GTK3 化しなきゃいけないのにこんなことで更新するのも…
Gst 1.0 は日曜にでも試してみる。

とりあえずこれまでに気がついたことでした。