SSブログ
Vine Linux ブログトップ
前の10件 | -

やっぱり通知アイコンは上に出て欲しい [Vine Linux]

VineSeed で gnome-shell を使っていて、以前から気になっている「一部の通知アイコンが画面下側に表示されちゃう。(しかも使いにくい)」問題をどうにかしようと調べた結果、Evil Status Icon Forever という拡張機能を使うと実現できることが分かったので、試して見ました。

まずは以下のページから必要なファイル (extension.js, metadata.json) をダウンロードします。
brianhsu/EvilStatusIconForever - GitHub:

で、~/.local/share/gnome-shell/extensions/EvilStatusIconForever@bone.twbbs.org.tw というディレクトリを作ったら、上記でダウンロードしたファイルを移動しておきます。

続けて、metadata.json を編集して、画面上側のバーに表示したいアプリ名を追加します。

/*****************************************************
 * Statuc Icon Settings
 ****************************************************/

//
// Add application you want it shows thier notification status
// icon on top bar to the following list.
//
// You may use top/htop to find out the name of application.
//

var notification = [
    'update-watch',   // アップデートの通知アイコン (update-wach)  ←追加
    'clipit',         //  クリップボードマネージャ (ClipIt)        ←追加
    'deadbeef',     // Deadbeef Music Player
    'pidgin',       // Pidgin IM Client
    'gcin',         // GCIN Chinese Input Method
    'hime'          // HIME Imput Method Editor
]


そうしたら gnome-shell を再起動するか、ログインし直せばこんな風に表示されるようになります。

範囲を選択_022.png

ひとまずこれですっきりしました。


epgrec をスマホ向けに改造してみる [Vine Linux]

携帯をスマホに乗り換えたのを機にスマホのブラウザで epgrec を使う機会が増えてきたんだけど、普通にスマホで使おうとすると、
  • 録画しようとして番組表をクリックすると表示される簡易予約の確認ダイアログが画面のかなり斜め下の方に表示されてしまう。(かなり使い辛い)
  • ヘッダ部分(番組説明とかが表示される所)が常に画面の上に表示されるのと、時間帯表示の帯が常に画面左に表示されてしまい、表示領域が狭い。

の2点がかなり気になります。

まあ気になるなら自分でなんとかしようよ、というノリで、やっつけで改造してみました。

この変更を加えると、
  • 録画しようとして番組表をクリックすると、確認画面をスキップしてダイレクトに予約録画される。また予約済みの番組の場合はダイレクトに予約がキャンセルされる。
    (番組説明が確認できなくなるので、それは予約済み一覧等で代用が必要)
  • ヘッダ部分と、時間帯表示の帯が固定される。
    (画面をスクロールしても追従してこなくなる)

という風に動きが変わるので、同じ悩みを抱えている人は良かったら試してみてください。

$ diff -uNr index.html.orig index.html
--- /var/www/epgrec/templates/index.html.orig	2011-02-07 00:30:56.000000000 +0900
+++ /var/www/epgrec/templates/index.html	2011-10-16 18:24:45.000000000 +0900
@@ -51,12 +51,16 @@
 				'<div class="prg_duration" style="clear: left"><span class=" labelLeft">録画時間:</span><span class="bold">' + parseInt(duration / 60) +'</span>分' + ((duration % 60)>0?'<span class="bold">' + parseInt(duration % 60) + '</span>秒':'') + '</div>' +
 				'</div>';
 			if ($(this).hasClass('prg_rec')) {
-				str += '<div style="margin:2em 0 1em 0;text-align:center;"><a href="javascript:PRG.cancel(' + prgID + ')" class="ui-state-default ui-corner-all ui-dialog-buttonpane button">予約キャンセル</a></div>';
+				// str += '<div style="margin:2em 0 1em 0;text-align:center;"><a href="javascript:PRG.cancel(' + prgID + ')" class="ui-state-default ui-corner-all ui-dialog-buttonpane button">予約キャンセル</a></div>';
+				// dialog をスキップして直接キャンセル
+				PRG.cancel(prgID);
 			} else {
-				str += '<div style="margin:2em 0 1em 0;text-align:center;"><a href="javascript:PRG.rec(' + prgID + ')" class="ui-state-default ui-corner-all ui-dialog-buttonpane button">簡易予約</a> <a href="javascript:PRG.customform(' + prgID + ')" class="ui-state-default ui-corner-all ui-dialog-buttonpane button">予約カスタマイズ</a></div>';
+				// str += '<div style="margin:2em 0 1em 0;text-align:center;"><a href="javascript:PRG.rec(' + prgID + ')" class="ui-state-default ui-corner-all ui-dialog-buttonpane button">簡易予約</a> <a href="javascript:PRG.customform(' + prgID + ')" class="ui-state-default ui-corner-all ui-dialog-buttonpane button">予約カスタマイズ</a></div>';
+				// dialog をスキップして直接簡易予約
+				PRG.rec(prgID);
 			}
-			$('#floatBox4Dialog').html(str);
-			$('#floatBox4Dialog').dialog('open', 'center');
+			// $('#floatBox4Dialog').html(str);
+			// $('#floatBox4Dialog').dialog('open', 'center');
 		};
 		$('.prg').hover(
 			function(){
@@ -255,7 +259,7 @@
 			$('#float_titles').width(INISet.num_all_ch * INISet.ch_width + 80);
 			$('#tv_chs').width(INISet.num_all_ch * INISet.ch_width );
 			$('#tvtimes2').css( { left: INISet.num_all_ch * INISet.ch_width  + 40 } ).show();
-			tvtimes_scroll();
+			//tvtimes_scroll();
 			$('#ch_title_bar div.ch_title_skip').show();
 			$('#tv_chs div.ch_set_skip').show();
 			nowBar.INI();
@@ -266,7 +270,7 @@
 			$('#float_titles').width( INISet.num_ch * INISet.ch_width + 80 );
 			$('#tv_chs').width( INISet.num_ch * INISet.ch_width );
 			$('#tvtimes2').css( { left: INISet.num_ch * INISet.ch_width  + 40 }).show();
-			tvtimes_scroll();
+			//tvtimes_scroll();
 			nowBar.INI();
 		},
 		toggle:function() {
@@ -398,7 +402,7 @@
 	$(document).ready(function () {
 		MDA.Cookie.CookieName = 'tvProgmas_';
 		CTG.toggle();
-		tvtimes_scroll();
+		//tvtimes_scroll();
 		prg_hover();
 		var DG = $('#floatBox4Dialog');
 		DG.dialog({title:'録画予約',width:600});



gnome-shell の extension が簡単にインストールできる (らしい) [Vine Linux]

ニュースサイトを見ていたら、こんなサイトが公開されているのを見つけました。

GNOME Shell Extensions

gnome-shell 用の extension (拡張機能) の一覧だけのページかと思ったら、そこから extension のインストールや ON/OFF が切り替えられるそうで、これはかなり良いかも。

GNOME Shell Extensions.png

Alternative Status Menu.png

しかーし、なぜだか Seed の firefox 上からだと、ON/OFF はできても、新規に extension をインストールするのはできなかったです。

# Gnome Shell Integration 用の plugin はインストールされているんだけどねぇ。


しばらく息抜き [Vine Linux]

ここしばらく全然 Vine Linux の開発作業ができていませんが、この先もどうなるのか分からないので、ひとまず息抜き宣言をしておきます。

Project に参加させてもらってからここ数年は、平日の夜や休日にそれなりの時間を割いて開発作業を楽しんでいましたが、その反面、小さい子供が二人居る普通の会社員にとっては自分の自由になる時間を確保するだけでもかなりしんどかったのと、最近は平日の夜や休みの日に家族との時間を確保することのほうが大事にも思えてきたので、思い切って開発作業の手を休めることにしました。

ということで、私が Packager となっている Package は自由に更新してもらって構いませんので、興味のある方はよろしくお願いします。

あと、BTS や Google グループもどなたかフォローしてもらえると助かります。

# とは言え、ML は普通に見てますし irc にもちょくちょく顔を出しますから、
# 見かけたら声掛けてください。
タグ:Vine linux

Vine Linux 6 向けのテーマを作ってみた [Vine Linux]

せっかくなので、気になっていた GTK/GNOME 向けのテーマをいろいろ入れてみた上で、最終的に Equinox をベースにして Vine Linux 6 向けのテーマを作ってみました。

ワークスペース 1_005.png

Equinox + Aldabla (Metacity) + 細かい調整、って感じです。

ここはこーした方が良いよ、とかコメント等あれば教えてもらえると嬉しいです。

Thinkpad X220 を Vine 6用に購入 [Vine Linux]

今使ってるメイン PC は Let's note W4の2005年モデルなんだけど、流石にこれ一台で普段使いから開発作業まで全部をまかなうのはそろそろきつくなってきたので、これは嫁PCとして退役させることにして、あたらしい開発機を色々物色してました。

んで、やっぱり Vine 6のインストールテストにも使えるのが良いなと思い、最近発売されたSandybridge 搭載の Thinkpad X220 を、Core i3 ⇒ Core i5、メモリ 2G ⇒ 4G、バッテリ 4セル ⇒ 6セル、という仕様に変更して直販からぽちっとしちゃいました。



とりあえずインストールは x86_64 にして、後は人柱としてがんばらせてもらう予定です。

発送予定はGWの真ん中辺りらしいので、連休の終わりまでには環境を移行できると良いな。


タグ:Vine ThinkPad X220

synaptic のバグ追い最終回 [Vine Linux]

errata を発行したらすぐに書こうと思ってたけど、lenovo のミニキーボードで遊んでて書きそびれていた、synaptic からパッケージの再インストールができないバグを追っかけた話の最終回です。

今までに三回ほどブログに書いてますが、
バグ追い初挑戦中
バグ追い継続中
バグ追い継続中2
結局途中で行き詰ってしまったので、しばらく気分転換して、また振り出しから初めてみることに。

まず、設定類を元に戻して再インストールを試してみると、やっぱり、
While preparing for installation:
	package vine-release-5.2-1vl5.noarch is already installed
E: Error while running transaction

と表示されてしうので、まずはこのメッセージの package ... is already installed を取っ掛かりにしてみます。

このメッセージを grep してソースを検索してみると、rpm-4.8.1/lib/rpmps.c に定義されていることから、rpm 自体は「既にインストールされているパッケージをもう一度インストールしようとしている」と認識してエラーを出していることが想定できます。

で、デバッガ (nemiver) で追いかけてみると、確かに rpmtsRun → checkProblems に行ってインストール前のチェックでエラーになっていることが確認できました。

さて、それじゃあと言う事で、再度 apt の設定ファイルに
APT::Get::ReInstall "true";

を追記した上でデバッガで追いながらステップ実行してみると、、、確かにエラーメッセージは出ているものの、さっきエラーを出してたところは問題なく実行されているように見える。

なんでだ?と思いながらしばらく考えていたら、ふと「もしかしてエラーメッセージはでてるけど、再インストール自体は成功してるんじゃ?」と思いついたので、試しに適当なファイルを削除してからそのファイルを提供しているパッケージを再インストールしてみると、ちゃんとファイルが作られていた!

なんだよーーー、とちょっとがっくりきたものの、これで一歩前進できたので、次はどこで
While preparing for installation:
	vine-release-5.2-1vl5.noarch

なるメッセージが出力されているのかを調べていきます。

最初はデバッガで追ってみたものの、そのままではどこが問題なのか分からなかったので、実際にインストールのプログレスを表示している synaptic-0.57.2/gtk/rginstallprogress.cc の RGInstallProgress::updateInterface() 内に printf 文を仕込んで、通常のインストール時と再インストール時とでどう処理が違うのかを確認してみました。

すると、IF ブロックの通り方が違うことに気づいたので、ポイントとなるコードの、
map<string, string>::const_iterator I = _summaryMap.find(line);

の意味を理解する為に、ウェブで検索して c++ での map や iterator の使い方を調べた結果、出力メッセージ中に特定の文字列が無いのかを判別する所で失敗してるのが分かりました。
(↑そもそもプログラミングができない人間がデバッグしている点にムリがあります)

ということは、新規インストールの時は _summaryMap にちゃんと文字列が設定されているのに、再インストールの時にはそれが設定されていないから結果として(処理は成功しているのに)変なエラーメッセージが出てしまう、ということになるので、この _summaryMap をに値を入れているとこを探していくと、gtk/rginstallprogress.cc で
void RGInstallProgress::prepare(RPackageLister *lister)
{
   for (unsigned int row = 0; row < lister->packagesSize(); row++) {
      RPackage *elem = lister->getPackage(row);

      // Is it going to be seen?
      if (!(elem->getFlags() & RPackage::FInstall))
         continue;

      const char *name = elem->name();
      const char *ver = elem->availableVersion();
      const char *pos = strchr(ver, ':');
      if (pos)
         ver = pos + 1;
      string namever = string(name) + "-" + string(ver);
      _summaryMap[namever] = elem->summary();
   }

と、FInstall の時だけ _summaryMap に値を入れているのが分かるので、ここを
       // Is it going to be seen?
-      if (!(elem->getFlags() & RPackage::FInstall))
+      if (!((elem->getFlags() & RPackage::FInstall) || (elem->getFlags() & RPackage::FReInstall)))

と、再インストールの時にも設定されるようにしてやることで、変なエラーメッセージが出ないようになり、正しく再インストールができるようになりました。

ということで、4年越しのバグをなんとかして解消できたので、自分としてはとても満足してます。

あと「諦めなければなんとかなるもんだ!」という良い経験になりました。

やったぜ!!

タグ:Vine Synaptic Debug

lenovo ミニキーボードのオレンジボタンを活用してみる [Vine Linux]

lenovo ミニキーボードの左上には、名前がわからないんだけどオレンジのボタンがあるので、
button.png

今回は、目立つこいつを有効活用する方法を考えてみました。

前にも書いたけど、うちの環境では基本 xbmc と firefox しか使いません。
そこで、このオレンジボタン一発でこの二つをパパッと切り替えられると格好良いかも、と思いついたので、今回はこれに挑戦してみます。


その1: key codeの割り当て直し
まず最初に、このオレンジのボタンの key code の確認。

端末を開いて、
$ xev

と入力すると、小さいウインドウが開いて端末上にずらずらと文字が流れていくので、出力が落ち着くのをまってからオレンジのボタンを押すと、こんな風に表示されます。
$ xev
<略>
KeyPress event, serial 30, synthetic NO, window 0x2c00001,
    root 0x157, subw 0x0, time 605781784, (858,340), root:(941,397),
    state 0x0, keycode 152 (keysym 0xffc9, F12), same_screen YES,
    XKeysymToKeycode returns keycode: 96
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

ここから key code が 152 なのが分かります。

次に、xmodmap を使ってこのキーを別のキーに割り当て直してやります。

実は xbmc が認識できる key code は制限があるみたいで、このオレンジのボタンはそのままでは認識してもらえないようなので、今回は F12 キーに振り替えてみます。

ホームフォルダに .Xmodmap という名前で、次の内容のファイルを作ります。
keycode 152 = F12

そして、Gnome を一旦ログアウトしてログインし直します。

すると、自動的にこんな確認画面が表示されるので、

Screenshot-modmap ファイルの読み込み.png

"読み込む"ボタンを押して、.Xmodmap を左側のリストに表示させてから、OK ボタンを押します。

これで、オレンジのボタンは F12 キーとして認識されるようになります。

その2: xbmcの設定追加
今度は、xbmc 側の設定を変更して、オレンジのボタンに Launcher 経由での firefox の起動を割り当てます。

まず、/usr/share/xbmc/system/keymaps/keyboard.xml を ~/.xbmc/userdata/keymaps/ にコピーします。
$ cp /usr/share/xbmc/system/keymaps/keyboard.xml ~/.xbmc/userdata/keymaps/


そして、このファイルにこんな風な記述を追加します。
$ diff -uNr /usr/share/xbmc/system/keymaps/keyboard.xml ~/.xbmc/userdata/keymaps/keyboard.xml 
--- /usr/share/xbmc/system/keymaps/keyboard.xml	2011-02-04 06:38:46.000000000 +0900
+++ /home/hoge/.xbmc/userdata/keymaps/keyboard.xml	2011-02-26 06:22:14.000000000 +0900
@@ -37,6 +37,7 @@
 <keymap>
   <global>
     <keyboard>
+      <f12>RunPlugin(plugin://plugin.program.launcher/?Firefox)</f12>
       <p>Play</p>
       <q>Queue</q>
       <f>FastForward</f>


これで、xbmc が起動している状態でも、オレンジのボタンを押すだけで firefox が起動できるようになります。

その3: firefox を閉じる設定
最後は、 firefox の起動中にオレンジのボタンを押したらこれを閉じるようにする為に、metacity のキーバインディングの gconf キーに、次の内容を設定します。
  • /apps/metacity/global_keybindings/run_command_12
    F12
  • /apps/metacity/keybinding_commands/command_12
    killall firefox

これで、オレンジのボタンを押すだけで xbmc ⇔ firefox が一発で切り替えられるようになります。

ますます便利になってきた[ぴかぴか(新しい)]


ブラウザをできるだけ広く使ってみる [Vine Linux]

xbmc からの起動も楽になったし、lenovo ワイヤレスキーボードで firefox が操作できるようになったものの、そのままだと、
  • タイトルバーのスペースが無駄
  • 右上の閉じるボタンが押しにくい
  • なんか普通の PC 使ってるみたいで格好良くない

ので、今回は次の二つを使ってこの辺りを改善してみます。
  1. windowapplets (GNOME パネルのアプレット)
  2. Toolbar Buttons (firefox のアドオン)


まず、windowapplets を synaptic パッケージマネージャか apt-get コマンドを使ってインストールします。

次に、windowapplets に含まれる Window Buttons アプレットをパネルに追加してやります。
パネルへ追加_002.png

こうしておくと、ウィンドウを最大化した時にタイトルバーを非表示にできます。(こんな感じ)
ワークスペース 1_003.png

後は、GNOME パネルを自動で隠すようにしておくと、見た感じは全画面表示と同じになります。

最後に、閉じる時にわざわざパネルを表示しなくても良いように、Toolbar Buttons アドオンをインストールしてツールバーに終了ボタンを配置しておけばOK。
(実際のブラウザはこんな感じです)
Screenshot.png

これで xbmc ⇔ firefox 間の切り替えが、基本1クリックでできるようになったので、かなり使い勝手が良くなりました。


タグ:Vine xbmc Firefox

Lenovo ワイヤレスキーボード N5901 繋いでみた [Vine Linux]

と言うことで、やっと時間が取れたので Lenovo のワイヤレスキーボード N5901 を Vine Linux 5.2 に接続してみました。

とりあえず本体の電源を入れた状態で USB ドングルを差して見ると、/var/log/messages にはこんな風にメッセージが出てきました。
kernel: usb 2-6: new low speed USB device using ohci_hcd and address 6
kernel: usb 2-6: configuration #1 chosen from 1 choice
kernel: input: Lenovo Mini Wireless Keyboard as /class/input/input6
kernel: input,hidraw1: USB HID v1.11 Keyboard [Lenovo Mini Wireless Keyboard] on usb-0000:00:04.0-6
kernel: input: Lenovo Mini Wireless Keyboard as /class/input/input7
kernel: input,hiddev96,hidraw2: USB HID v1.11 Mouse [Lenovo Mini Wireless Keyboard] on usb-0000:00:04.0-6


lsusb で見てみるとこんな感じ。
$ lsusb
Bus 001 Device 006: ID 3275:6051 VidzMedia Pte Ltd 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 006: ID 17ef:6014 Lenovo 
Bus 002 Device 003: ID 0609:0353 SMK Manufacturing, Inc. 
Bus 002 Device 004: ID 046d:c315 Logitech, Inc. Classic New Touch Keyboard
Bus 002 Device 002: ID 04e6:511a SCM Microsystems, Inc. 
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub


で、GNOME デスクトップ上では何もしなくてもそのまま認識してくれて、普通にキーボードもトラックボールも使えました。ちょっと拍子抜け;

XBMC も、XBMC 自体を一旦再起動してあげたら、あっけなく動作するようになって、まったく問題なく反応してくれて、最近の Linux は便利になったよなーと、なんか妙に関心してしまいました。

試しにボリュームの上げ下げマークがついたボタンを、GNOME のキーボード・ショートカットの設定で音量の上げ下げに割り当てたところ、簡単に音量の調整ができるようになってしまって、ちょー便利でかなり嬉しいです。

さて、そのキーボード自体の感想ですが、
  • 全体はかなり小さくて、トラックボールとマウスの左右ボタンだけなら手の小さい自分でも片手持ちで操作できて良い感じ。
  • キーを押した感じはちょっと固いけど、手元を見ながらぽちぽちやる分にはあまり気にならなそう。
  • トラックボールは、振ると小さくカチャカチャ言うのがちょっと気に入らないけど、やっぱり便利。ただし、ぐりぐりやり過ぎるとたまに取りこぼしが起きるようで、ポインタがジャンプしてくれます。でも許容範囲かなと。
  • キーの数が少ないので、一部のキーは Fn と同時押しが必要。まあ大きさからしてしょうがないけど、それにしても . (ピリオド) が Fn + 上の方のボタン、に割り当ててあるのは納得いかない。(まあ xmodmap 辺りでいずれ割り当て直す予定だけど)
  • ホイールが無いのはちと辛い。買う前から分かっていたけど、片手でスクロールまでできたら完璧でしたね。これも何か別の方法で改善してみようと考え中です。

といった感じです。

総合的に見て、ほぼ満足のいく買い物でした。

あとは PC 側の設定を変えたりしながら、より使いやすいものにしていこうと思っています。

まずは XBMC と firefox の切り替えをどうやってやろうかなーと言うのが最初のネタかなと。(嫁や子供にも使えるようにしてないといけないので)


タグ:Vine Lenovo
前の10件 | - Vine Linux ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。