試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

Screenletsの覚え書き

Screenletsは、Compiz Fusion向け*1のデスクトップウィジェットアプリケーション。SVG画像を使用した時計や天気、カレンダーなどのウィジェットをデスクトップ上に置くことができる。

バージョン0.0.10が起動できない問題に対処

Gentoo Linuxの「xeffects」OverlayでインストールしたScreenlets 0.0.10では、下のエラーが出て起動できなかった。

$ screenlets-manager
Unable to load 'CopyStack' from /usr/share/screenlets/CopyStack: invalid syntax (CopyStackScreenlet.py, line 365) 
Traceback (most recent call last):
  File "/usr/share/screenlets-manager/screenlets-manager.py", line 589, in ?
    app = ScreenletsManager()
  File "/usr/share/screenlets-manager/screenlets-manager.py", line 133, in __init__
    self.load_screenlets()
  File "/usr/share/screenlets-manager/screenlets-manager.py", line 259, in load_screenlets
    info = ScreenletInfo(s, meta['name'], meta['info'], meta['author'], 
TypeError: unsubscriptable object

これは、
http://bytecoders.homelinux.com/content/instalar-screenlets-en-debian-lenny.html
を参考に、sedで下のように修正することで起動できるようになった。

$ sudo sed -i -e 's/\(class Tooltip\) ():/\1:/' /usr/share/screenlets/CopyStack/CopyStackScreenlet.py

Gentooのxeffects Overlay版ではscreenlets-managerを起動するメニュー項目が無い?

Gentoo Linuxの「xeffects」Overlayで入れたScreenlets 0.0.10では、デスクトップ環境のメニュー項目*2が無い*3。下の.desktopファイル*4を作成することで、メニューから設定ツールが開けるようになる。
ファイル名: ~/.local/share/applications/screenlets-manager.desktop

[Desktop Entry]
Type=Application
Categories=Settings;
Name=Screenlets
Name[de]=Screenlets
Name[ja]=Screenlets マネージャ
Comment=A graphical tool to manage your Screenlets.
Comment[de]=Ein grafisches Werkzeug, um Ihre Screenlets zu verwalten.
Comment[ja]=Screenletsを管理するグラフィカルなツールです。
Encoding=UTF-8
Icon=screenlets
Exec=/usr/share/screenlets-manager/screenlets-manager.py > /dev/null
StartupNotify=true

と書いてから気づいたのだが、ebuildとビルドログを見ている内に、

find: warning: Unix filenames usually don't contain slashes (though pathnames do).  That means that '-name `/var/tmp/portage/x11-plugins/screenlets-0.0.10/work/screenlets-0.0.10/desktop-menu'' will probably evaluate to false all the time on this system.  You might find the '-wholename' test more useful, or perhaps '-samefile'.  Alternatively, if you are using GNU grep, you could use 'find ... -print0 | grep -FzZ `/var/tmp/portage/x11-plugins/screenlets-0.0.10/work/screenlets-0.0.10/desktop-menu''.
find: paths must precede expression: *.desktop
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

.desktopファイルをコピーする部分が失敗しているのを発見。

--- /usr/local/overlays/layman/xeffects/x11-plugins/screenlets/screenlets-0.0.10.ebuild.orig
+++ /usr/local/overlays/layman/xeffects/x11-plugins/screenlets/screenlets-0.0.10.ebuild
@@ -23,9 +23,13 @@
 RDEPEND="${DEPEND}"
 
 src_install() {
+	sed -i "s/\(class Tooltip\) ():/\1:/" \
+		src/share/screenlets/CopyStack/CopyStackScreenlet.py || die "sed failed to fix syntax error"
+
 	sed -i "s;/usr/local;/usr;g" \
 		src/lib/__init__.py \
 		setup.py bin/screenlets-* \
+		desktop-menu/*.desktop \
 		desktop-menu/applications/* \
 		desktop-menu/desktop-directories/Screenlets.directory || die "sed failed to change install path"
 
@@ -40,7 +44,7 @@
 	# Insert .desktop files
 	insinto /usr/share/applications
 	cd "${S}"/desktop-menu
-	for x in $(find -name "${S}"/desktop-menu '*.desktop')
+	for x in $(find "${S}"/desktop-menu -name '*.desktop')
 	do
 		doins $x
 	done

上の修正(置換漏れの修正と文法エラーの修正も追加)をしてダイジェストを取り直し、更に一度アンインストールしてから入れ直したところ、.desktopファイルは入った*5

Screenletの追加と削除

時計や天気などの個々のウィジェットを「Screenlet」と呼ぶ。

  • screenlets-managerを起動し、一覧から「Launch/Add...」でScreenlet(の個々の実体/インスタンス)を追加できる。複数起動も可能。
  • 「Enable/Disable」では、Screenletを削除せずに「有効/無効」の切り替えをする。
  • 設定も含めてScreenletを削除するには右クリックして「Delete Screenlet...」。複数起動した場合に個別に削除するときもこれを選択。
  • ログイン時に起動したいものは、一覧から項目を選択して「Automatically start on login」にチェックする。

標準以外のScreenletをインストール

から色々なScreenletがダウンロードできる。
GUI(screenlets-manager)で追加しようとしても、うまくいかない場合があるので、手動で${HOME}/.screenlets/以下に展開するのがよい。
下は、現在のディレクトリにあるScreenletファイルをインストールする例。File RollerなどのGUIツールでは、展開先を${HOME}/.screenlets/に指定する。

$ for x in *.tar.gz; do tar zxf ${x} -C ~/.screenlets/; done
$ for x in *.tar.bz2; do tar jxf ${x} -C ~/.screenlets/; done

アンインストールはGUIでもできる。

使用したバージョン:

  • Screenlets 0.0.10

関連記事:

*1:xcompmgrや、xfwm4(Xfce4のウィンドウマネージャ)などの透過機能でも使用できるが重い

*2:Xfce 4では「設定」の下、GNOMEでは「システム - 設定」の下

*3:「qlist screenlets | grep "\.desktop$"」を実行しても何も出ない

*4:ソースツリーに含まれているものを修正して日本語を入れたもの

*5:が、「その他」にメニュー項目がたくさん入ってしまった...