2016-12-27

GNOME デスクトップにアイコンを表示する

Fedora 25 から、Wayland がデフォルトのウィンドウシステムに採用されるようになりました。Wayland は、X Window System の代替を目指している Linux 向けに開発されたディスプレイサーバーのプロトコルで、OpenGL ES ベースのグラフィックシステムです [1]

Wayland は、Fedora 23 の頃から利用出来るようにはなっていましたが、X Window から完全に置き換えるにはまだ機能不十分と思っていました。しかし、Fedora 25 ではデフォルトの設定のままインストールすると GNOME のデスクトップ環境がインストールされ、Wayland が X Window の代わりに利用されるようになります。機能的には、以前とあまり変わらないなと思っていましたが、(頻繁にあるパッケージのアップデート後)ある時からデスクトップにアイコンが表示されるようになりました。

X Window を利用している時にはデスクトップ上によく使うアプリケーションのアイコンなどを表示していたのですが、Wayland に切り替えてから表示されなくなっていました。設定をそのまま残していたので Wayland 側が対応したことにより、また表示されるようになったのでしょう。

ということで、GNOME のデスクトップにアイコンを表示する方法についてまとめてみました。

動作環境は次の通りです。

  • OS: Fedora 25 (x86_64)
  • xorg-x11-server-Xwayland-1.19.0-2.fc25.x86_64
    • および関連ライブラリ
  • gnome-tweak-tool-3.22.0-1.fc25.noarch

Gnome Tweak Tool

GNOME Tweak Tool を使うと、Microsoft Windows のようにデスクトップ上にホームディレクトリなどを表示することができます。設定例を下記に示しました。

「デスクトップ」フォルダの利用

(「フォルダ」という語を使うのは抵抗があるのですが…)$HOME/デスクトップ にアプリケーションの desktop ファイル(デスクトップエントリファイル)をコピーするとデスクトップ上にアプリケーションのアイコンが表示されます。

$ cd ~/デスクトップ
$ ls
'Notepad Plus Plus.desktop'  netbeans-8.2.desktop
Pidgin.desktop               org.gnome.Cheese.desktop
dia.desktop                  org.gnome.Screenshot.desktop
eclipse.desktop              org.gnome.Terminal.desktop
gimp.desktop                 org.gnome.gedit.desktop
google-chrome.desktop        sqlitebrowser.desktop
libreoffice-calc.desktop     studio.desktop
libreoffice-draw.desktop     transmission-gtk.desktop
libreoffice-impress.desktop  wxPython
libreoffice-writer.desktop   xmind.desktop
mscore.desktop
$ 

ファイル (nautilus) でデスクトップフォルダを見ると、アイコンがそのまま表示されています。

この desktop ファイル(デスクトップエントリファイル)は単純なテキストファイルで、テキストエディタなどで内容を確認できます。例えば Netbeans IDE の netbeans-8.2.desktop の内容は以下のようになっています。

[Desktop Entry]
Encoding=UTF-8
Name=NetBeans IDE 8.2
Comment=The Smarter Way to Code
Exec=/bin/sh "/home/bitwalk/netbeans-8.2/bin/netbeans"
Icon=/home/bitwalk/netbeans-8.2/nb/netbeans.png
Categories=Application;Development;Java;IDE
Version=1.0
Type=Application
Terminal=0

この desktop ファイルは、アプリケーションパッケージをインストールした時に、/usr/share/applications にインストールされます。デスクトップに起動用のアイコンを表示したい場合は、自分のアカウントの $HOME/デスクトップ へ該当する desktop ファイルをコピーするかシンボリック・リンクを作成します。

その他のファイルなどもデスクトップに表示させたい場合は、直接 $HOME/デスクトップ に保存するか、シンボリック・リンクを作成します。

ちなみに、自分のアカウントの領域($HOME)にインストールしたアプリケーションについては、そのアプリケーションが対応していれば、$HOME/.local/share/applications に desktop ファイル(デスクトップエントリファイル)があると思います。

参考サイト

  1. bitWalk's: Wayland と X Window System
  2. Wayland - Wikipedia

 

ブログランキング・にほんブログ村へ
にほんブログ村

2016-12-11

Fedora Media Writer

Fedora をインストールする標準メディアは長い間 CD あるいは DVD でしたが、大容量のフラッシュメモリが安価で入手できるようになった今、もっぱらインストールに USB のフラッシュメモリが使用されるようになりました。

先日リリースされた Fedora 25 では、フラッシュメモリのような USB メディアをデフォルトのインストール・メディアとして扱うようになりました。Fedora Media Player は、USB メモリに Fedora のインストール用イメージを作成するユーティリティ・ツールです。従来からあった liveusb-creator をオーバーホールして改良したもので、より簡単に Fedora のインストーラーイメージを USB メモリに作成できるようになりました [1]

今回は、この Fedora Media Writer の使い方を紹介します。

使用環境は以下のとおりです。

  • OS: Fedora 25 (x86_64) / GNOME desktop

Fedora Media Writer のインストール

端末エミュレータを起動して、root 権限で次のようにタイプしてインストールします。

$ su
パスワード:
# dnf install mediawriter
メタデータの期限切れの確認は、0:33:09 時間前の Sun Dec 11 09:11:56 2016 に実施しました。
依存性が解決されました。
================================================================================
 Package             アーキテクチャ バージョン            リポジトリ       容量
================================================================================
インストール:
 mediawriter         x86_64         4.0.7-0.fc25          updates         2.7 M

トランザクションの要約
================================================================================
インストール  1 パッケージ

総ダウンロード容量: 2.7 M
インストールされる容量: 4.8 M
これでいいですか? [y/N]: y
パッケージをダウンロードしています:
mediawriter-4.0.7-0.fc25.x86_64.rpm             2.9 MB/s | 2.7 MB     00:00    
--------------------------------------------------------------------------------
合計                                            1.0 MB/s | 2.7 MB     00:02     
トランザクションの確認を実行中...
トランザクションの確認に成功しました。
トランザクションのテストを実行中...
トランザクションのテストに成功しました。
トランザクションを実行中...
  インストール  : mediawriter-4.0.7-0.fc25.x86_64                           1/1 
  検証中        : mediawriter-4.0.7-0.fc25.x86_64                           1/1 

インストール済み:
  mediawriter.x86_64 4.0.7-0.fc25                                               

完了しました!
# exit
exit
$ 

Fedora Media Writer の使い方

まず、インストールメディアに使用する USB メモリを USB に挿入しておきます。容量は 2GB 以上あれば十分でしょう。

「アクティビティ」をクリックして表示されるバーから「アプリケーションを表示する」を選択して、Fedora Media Writer のアイコンをクリックして起動します。端末エミュレータから起動する場合は mediawriter とタイプして改行します。

Fedora Workstation と Fedora Server のフレーバーが選択できるようですが、ここでは Fedora Workstation をクリックします。

Fedora Workstation の説明画面になりますので、「Create Live USB」ボタンをクリックして次へ進みます。

インストール用の iso イメージが $HOME/ダウンロード 以下にダウンロードされます。

ダウンロードが終了すると「Write to disk」ボタンが赤くなりますので、クリックして USB メディアに書き込みます。

root 権限が必要になると認証を要求されるので、root のパスワードを入力入力して「認証」ボタンをクリックします。

USB へ書き込みが始まります。

書き込みが終われば検証がはじまります。

懸賞が無事終了すると「Close」ボタンが表示されますので、クリックして終了します。

参考サイト

  1. How to create and use Live USB - FedoraProject

 

ブログランキング・にほんブログ村へ
にほんブログ村

2016-12-05

Java DB を試す

Apache Derby は、IBM から寄贈された Cloudscape のソースコードを元に、Apache ソフトウェア財団によってプログラムの開発が進められている、Java 技術で実装された RDBMS のソフトウェアです。Java DB は、オープンソースの Apache Derby データベースをオラクルがサポートしたディストリビューションです。JDBC API および Java EE API により標準の ANSI/ISO SQLをサポートします。Java DBは、JDKに含まれています。

以前、Python で SQLite3 のデータベースを操作するサンプルを紹介しましたが [1]、Java と Python を状況に応じて使い分けており、アプリケーション専用で使用するような簡単なデータベースが利用できると、どちらの場合も便利です。Java の開発環境である JDK では、Java DB が利用できるので、わざわざ SQLite を使わなくとも、ひとまず、Java DB を使ってみることにしました。

動作環境は次の通りです。Linux (Fedora) ですが、標準パッケージの OpenJDK は使用していません。

  • OS: Fedora 25 (x86_64)
  • Java: jdk1.8.0_112-1.8.0_112-fcs.x86_64 (Oracle)
  • IDE: NetBeans IDE 8.2

ライブラリの追加

Java DB を使うためには、Java DB 用の JDBC ドライバーの入っているライブラリーが必要になります。組込用途には derby.jar を、クライアント/サーバー環境用には derbyclient.jar をクラスパスに追加します。

今回は、組込用途として derby.jar を下記のように NetBeans のプロジェクトに追加しました。

サンプルソース

今回も DBOnlineSQLite入門 › データの追加と削除 › データの更新 [2] で使われている例をベースに焼き直しています。あらかじめご了承ください。

リスト:JavaDBTest.java 
package javadbtest;

import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;

public final class JavaDBTest {

    Connection conn;

    JavaDBTest(String dbFile) {
        connection(dbFile);
    }

    // database connection
    void connection(String dbFile) {
        try {
            conn = DriverManager.getConnection("jdbc:derby:" + dbFile + "; create=true");
        } catch (SQLException ex) {
            Logger.getLogger(JavaDBTest.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    // Executes the given SQL statement that returns nothing
    void executeSQL(String sql) {
        Statement stat;
        try {
            stat = conn.createStatement();
            stat.executeUpdate(sql);
        } catch (SQLException ex) {
            Logger.getLogger(JavaDBTest.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    // Executes the given SQL statement, which returns a single ResultSet object.
    ResultSet querySQL(String sql) {
        Statement stat;

        try {
            stat = conn.createStatement();
            return stat.executeQuery(sql);
        } catch (SQLException ex) {
            Logger.getLogger(JavaDBTest.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }

    // database termination
    void shutdown(String dbFile) {
        try {
            conn.close();
            DriverManager.getConnection("jdbc:derby:" + dbFile + "; shutdown=true");
        } catch (SQLException ex) {
            Logger.getLogger(JavaDBTest.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public static void main(String[] args) {
        String dbName = "test01";
        String dbDir = new File(System.getenv("HOME"), "tmp").getPath();
        String dbFile = new File(dbDir, dbName).getPath();

        JavaDBTest db = new JavaDBTest(dbFile);

        // create table
        db.executeSQL("create table staff(id integer, name varchar(10), unit varchar(10), flag varchar(4))");
        db.executeSQL("insert into staff(id, name, unit, flag) values (1, 'Satoh', 'Sales', 'Yes')");
        db.executeSQL("insert into staff(id, name, unit, flag) values (2, 'Mori', 'Office', 'No')");
        db.executeSQL("insert into staff(id, name, unit, flag) values (3, 'Yamada', 'Office', 'Yes')");
        db.executeSQL("insert into staff(id, name, unit, flag) values (4, 'Asada', 'Tech', 'Yes')");
        db.executeSQL("insert into staff(id, name, unit, flag) values (5, 'Noguchi', 'Sales', 'No')");

        // query
        ResultSet res = db.querySQL("select * from staff");
        try {
            while (res.next()) {
                System.out.println(res.getInt("id") + "\t" + res.getString("name")
                        + "\t" + res.getString("unit") + "\t" + res.getString("flag"));
            }
        } catch (SQLException ex) {
            Logger.getLogger(JavaDBTest.class.getName()).log(Level.SEVERE, null, ex);
        }

        // database termination
        db.shutdown(dbFile);
    }
}

実行例

CPU (N2830) が非力だからでしょうか、妙に時間がかかっています。

run:
1 Satoh Sales Yes
2 Mori Office No
3 Yamada Office Yes
4 Asada Tech Yes
5 Noguchi Sales No
ビルド成功(合計時間: 12秒)

参考サイト

  1. bitWalk's: Python と SQLite3
  2. データの更新(UPDATE文) - SQLite入門
  3. JavaDBメモ(Hishidama's JavaDB Memo)
  4. Windows上でjavaDBをとりあえず使ってみる

 

ブログランキング・にほんブログ村へ
にほんブログ村