恥は/dev/nullへ by 初心者

プログラミング初心者がのろのろと学んだことをつづっています♪

Debianメモ(3) automatic package

  

 この記事の情報源

buster用のDebian Administrator's Handbookを元にして、この記事を書いています。
https://debian-handbook.info/

本記事では、以下「buster用ハンドブック」と記述します。

 

 

automatic packageとは?

依存関係を満たすためだけにインストールされたパッケージのことを automatic package と呼びます。

 

 

automatic packageを除去するコマンド 

あるパッケージを削除した後、もう必要のない automatic package を除去するには次のコマンドを使います。

apt autoremove
apt-get autoremove

 

busterハンドブックによると、aptitudeは automatic package を見つけると自動的に削除するので、aptitudeには上記コマンドが存在しないそうです。

 

 

automatic package を指定するコマンド

必要なくなった時、自動的に削除されるように、自分が直接必要としていないパッケージを automatic としてマークしておきましょうとbusterハンドブックに書かれていますが、ドライブの容量がひっ迫していなければ自分はやらなさそうな気がしなくもありません(ぼそっ)。

 

パッケージを automatic としてマークするには以下のコマンドがあります。

apt-mark auto パッケージ名
aptitude markauto パッケージ名

 

なお、反対のコマンドは以下のとおりです。

apt-mark manual パッケージ名
aptitude unmarkauto パッケージ名

 

 

インストールされた理由を調べる(aptitude why)

ある automatic package が何故システムに存在するのか調べるには、aptitude why コマンドを使います。なお、aptやapt-getにはこれに相当するコマンドが無いようです。

(busterハンドブックに載っていた使用例)

$ aptitude why python-debian

 

(実行結果)

i aptitude Suggests apt-xapian-index
p apt-xapian-index Depends python-debian (>= 0.1.14)

 

 

deborphanとdebfoster

不要なパッケージを除去するのに使えるコマンドとして、deborphan、debfosterというものがあるようです。どちらも使ったことが無いので、busterハンドブックやmanページを斜め読みしてアバウトに理解したことをメモしておきます。

 

deborphanは libsセクションや oldlibsセクションを調べて、他のパッケージが依存していないパッケージを探してくれるようです。ちなみに、-d オプションを付けて実行すると、インストールされている全てのパッケージと依存しているパッケージを表示してくれます。

 

debfosterは(依存関係を満たすために自動的にインストールされたパッケージではなく)ユーザーが直接要求してインストールしたパッケージの一覧を保持しています。debfosterがこの一覧に記録していないパッケージを見つけた場合、もしくは、かつては依存関係を形成していたものの今はもう依存関係が無くなり孤立していると認識した場合、このパッケージをどうするかユーザーに尋ねてくるようです。

 

Debianメモ(2) パッケージやシステムのupgradeとログファイル

upgrade系コマンドについて、Debian Administrator's Handbookを読みました(ただ、目新しい知識は余りありませんでした^^;。distributionを指定してupgradeする方法くらいだったような気がします。)。

 

 

この記事の情報源

buster用のDebian Administrator's Handbookを元にして、この記事を書いています。
https://debian-handbook.info/

 

本記事では、以下「buster用ハンドブック」と記述します。

 

 

パッケージのアップデート

先にapt updateを行った上で、以下のいずれかのコマンドを実行します。

apt upgrade
apt-get upgrade
aptitude safe-upgrade

このうち、(aptやaptitudeに比べると)apt-getはやや厳しく、事前にインストールされていないパッケージのインストールを拒む、とbusterハンドブックに書かれています。aptやaptitudeは、必要ならマシン上に存在しないパッケージもインストールするということでしょうか・・・?

この点は他のサイトを後日調べてみることにします。

 

distributionを指定してアップグレード

アップグレードされたパッケージを探す時に、特定のdistribution(stable版、unstable版、buster、stretchなど)を指定するには、aptに対して -t オプションか --target-releaseオプションを使用します。

apt -t stable upgrade

 

毎回指定するのが面倒な場合は、/etc/apt/apt.conf.d/local に以下のように記述します。

APT::Default-Release "stable"

 

システム全体のアップグレード

apt full-upgrade
aptitude full-upgrade
apt-get dist-upgrade

 

apt や aptitude の場合は full-upgrade を使いますが、以下のようにdist-upgrade を使うこともできるそうです。

apt dist-upgrade
aptitude dist-upgrade

 

ログファイル

apt等でアップグレードした内容は以下のログファイルにあります。

/var/log/apt/history.log
/var/log/apt/term.log

 

一方、dpkgのログは次のファイルに記述されています。

/var/log/dpkg.log

 

APTの設定ファイル等

/etc/apt/apt.conf.d/ ディレクトリ、または /etc/apt/apt.conf ファイルに指示を記述することでAPTの挙動を設定することができますが、busterハンドブックには余り詳しいことが書かれておらず、「man apt.conf」を読みましょうとのことでした。
実際、それが一番良いと思います。

 

.d で終わるディレクト

名前が .d で終わるディレクトリには、複数の設定ファイルが入っています。

たとえば、/etc/apt/apt.conf.d/ にはAPTに対する指示が記述されたファイルがあります。


APTはそれらのファイルをアルファベット順に読み込むため、最初の方でなされた指示を最後の指示によって変更することができます。busterハンドブックには「この仕組みが、マシンの管理者やパッケージのメンテナーに柔軟性をもたらす。」と書かれています。

 

外部スクリプトが .dディレクトリにある設定ファイルを結合して設定ファイルを自動生成するケースがあるようです。この場合の注意点について、busterハンドブックに次のように書かれています。

 

Depending on the application, the .d directory is used directly or managed by an
external script which will concatenate all the files to create the configuration file
itself. It is important to execute the script after any change in that directory so
that the most recent modifications are taken into account. In the same way, it is
important not to work directly in the configuration file created automatically, since
everything would be lost at the next execution of the script.

 

(テキトーな訳)
アプリケーションによっては .d ディレクトリを外部スクリプトが直接利用したり管理したりします。このスクリプトは全てのファイルを結合して設定ファイルを作り出します。
.d ディレクトリに何か変更を加えた後は、直近の変更を反映させるために、このスクリプトを実行することが重要です。
また、外部スクリプトにより自動生成された設定ファイルを直接変更してはいけません。次にスクリプトを実行した時に変更内容が全て失われてしまうからです。

 

/usr/share/doc/パッケージ名/README.Debian

当たり前ですが、/usr/share/doc/パッケージ名/README.Debian を読むのは大切ですね。busterハンドブックに次の記述があります。

 

Without a .d directory, it is impossible for an external package to change the settings of a program without modifying its configuration file. Instead it must invite the user to do it themselves and lists the operations to be done in the file
/usr/share/doc/package/README.Debian.

 

(テキトーな訳)
.d ディレクトリが無い場合、設定ファイルを変更せずに外部パッケージがプログラムの設定を変更することはできません。代わりに、ユーザーが設定を変更するように案内し、/usr/share/doc/パッケージ名/README.Debian に必要な作業内容を一通り記述しておく必要があります。

Debianメモ(1) パッケージのインストールや削除、キャッシュの掃除ほか by APT

普段、何気なくapt-get install等を使っていますが、ちゃんとマニュアルを読んだことがなかったのでDebian Administrator's Handbookを読んで知識を整理してみました。

 

 

この記事の情報源

buster用のDebian Administrator's Handbookを元にして、この記事を書いています。
https://debian-handbook.info/

 

本記事では、以下「buster用ハンドブック」と記述します。

なお、本記事に登場するbuster用ハンドブックのページ番号は、英語版のbuster用ハンドブックに対応しています。

 

 APTという表現

APTは Advanced Package Tool の略語で、パッケージの管理システム全体を指す言葉です。aptコマンドはその一部です。
本記事では、aptコマンドと区別するために、大文字でAPTと表記しています。

 

余談ですが、Debian Wikiを見たら、APTに含まれる各種ツールが以下のページに載っていました。

PackageManagementTools - Debian Wiki 

 

 apt-getとapt

buster用ハンドブックによると、APTプロジェクトにおける最初のフロントエンドがapt-getで、2番目のフロントエンドがaptです。aptは対話型の利用に向けて改良されている一方、apt-getはパッケージのインストール作業をシェルスクリプト等で行うシーンで好まれるそうです。

なお、buster用ハンドブックはaptを推奨しています。

 

よく使うコマンド

apt update (パッケージの一覧をアップデート)
apt install   (パッケージをインストール)
apt remove (設定ファイルを残してパッケージを削除)
apt-get clean または apt-get autoclean (キャッシュディレクトリを掃除)

 

まずはパッケージの一覧をアップデート

新たにパッケージをインストールする前に

apt update

 を実行し、利用できるパッケージの一覧をアップデートします。
buter用ハンドブックによると、Packages, Sources, Translation-language-codeなどのファイルをリポジトリからダウンロードしているようです。

 

パッケージのインストールと削除

パッケージをインストールするには

apt install パッケージ名

 とします。自動的に、依存関係を満たすように必要なファイル一式をインストールします。

(使用例)

apt install vim

この使用例では vim をインストールしています。

 

パッケージを削除するには、

apt remove パッケージ名

とします。自動的に、削除するパッケージが依存していたパッケージも削除します。
apt purgeと異なり、設定ファイルは削除されずに残ります。

(使用例)

apt remove vim

 

設定ファイルも含めてパッケージを削除する場合は

apt purge パッケージ名

とします。apt removeと異なり、設定ファイルも含めて完全にアンインストールされます。

 (使用例)

apt purge vim


あるパッケージをインストールするついでに、別のパッケージを削除したい場合

apt install package1 package2-

 とすることで、package1がインストールされ、package2が削除されます。

なお、同じことをするのに、以下のようにすることもできます。

apt remove package1+ package2

 この2つの例にあるとおり、パッケージ名の末尾に「+」を付けたものがインストールされ、「-」を付けたものが削除されます。

 

【地味に大切】キャッシュ用ディレクトリをお掃除する

(buster用ハンドブック 119ページ)
APTはダウンロードしたdebファイルのコピーを /var/cache/apt/archives/ に保存しています。そのため頻繁にアップデートがあった場合、このディレクトリが肥大化します。そこで、定期的にこのディレクトリを掃除する必要があります。

この目的に使われるコマンドとして、apt-get cleanapt-get autocleanがあります。

 

apt-get clean

 /var/cache/apt/archives/ディレクトリを丸ごと空っぽにします。

 

apt-get autoclean

 もうダウンロードすることができなくなったパッケージ(リポジトリから無くなったパッケージ)だけを/var/cache/apt/archives/から削除します。

 

インストール済みのパッケージを再インストールする方法

buster用ハンドブックの118ページに、既にインストールされているパッケージを再インストールする方法が書かれています。

たとえば、パッケージのファイルを修正した結果、システムが上手く動かなくなったとします。こんな時、壊れたファイルを修復するためにパッケージを再インストールしたいところです。しかし、パッケージが既にインストールされているため、システムはパッケージのインストールを拒否します。

 

このような場面で、aptコマンドに --reinstall オプションを使います。
以下の例ではpostfixのパッケージを再インストールしています。

apt --reinstall install postfix

 

なお、aptitudeを使う場合は次のようになります。

aptitude reinstall postfix

 

パッケージのバージョンを指定してインストールする方法

(buster用ハンドブックの119ページ)
sources.listファイル内で複数のディストリビューション(stable版、testing版、unstable版など)を参照するように設定されていれば、aptコマンドに対してインストールしたいバージョンを指定することができます。

 

apt install パッケージ名=バージョン

 という形式も使えるものの、通常は以下の形式が好まれるそうです。

apt install パッケージ名/ディストリビューション

 

たとえば、unstable版に含まれるspamassassinパッケージをインストールする場合、次のようになります。

apt install spamassassin/unstable

 

複数台のマシンに同じパッケージ群をインストールする方法

あるマシンにインストールされているのと同じパッケージ構成を他のマシンにインストールする方法が、buster用ハンドブックの117~118ページに書かれています。

 

最初に、既に各種パッケージのインストールが終わっているマシンで

dpkg --get-selections > pkg-list

を実行して、パッケージの一覧をpkg-listファイルに書き出します。

 

書き出したファイルをこれからパッケージをインストールしたいマシンに保存して、以下のコマンドを実行します(buster用ハンドブックからそのままコピペしました)。

## Update dpkg’s database of known packages
avail='mktemp'
apt-cache dumpavail > "$avail"
dpkg --merge-avail "$avail"
rm -f "$avail"

## Update dpkg’s selections
dpkg --set-selections < pkg-list

## Ask apt-get to install the selected packages
apt-get dselect-upgrade

 

参考までに、manに書かれていた各コマンドの意味は次のとおりです。

apt-cache dumpavail

利用可能なパッケージの一覧を標準出力に表示します。

 

dpkg --merge-avail ファイル名

古い情報を(引数として指定した)パッケージファイルの情報と結合します。

 

dpkg --set-selections ファイル名

引数として指定したファイルの内容をセットします。

 

buster用ハンドブックによると、最初の方のコマンド(apt-get dselect-upgrade以外のコマンド)は、dpkgデータベースにある利用可能なパッケージの一覧を記録するものだそうです。 

あとは、apt-get dselect-upgradeが必要なことをやってくれますが、aptitudeにはこれに相当するコマンドが無いそうです。

 

 

Debian環境設定(4) /etc/apt/sources.list の設定

この記事は、主にDebian Administrator's Handbookを眺めて書いたものです。
対象はDebian 10 (buster)です。

 

  

Part 1 : Debian Administrator's Handbook

Debian Administrator's Handbookのサイト

 ダウンロードページ

 

 

Part 2 : 用語

APT

APTは Advanced Package Tool の略だそうです。

 

ソースパッケージとパッケージソース

ソースパッケージ(source package)は、ソースコードのパッケージ。
パッケージソース(package source)は、パッケージのあるリポジトリ

 

 

Part 3 : /etc/apt/sources.listの説明

APTを使うにはリポジトリの一覧を /etc/apt/sources.list に記述しておく必要があります。 

<例>
deb http://ftp.riken.jp/Linux/debian/debian buster main contrib non-free
deb-src http://ftp.riken.jp/Linux/debian/debian buster main contrib non-free

ベースリポジトリ以外も記述したフル設定の例はPart4の「stable版向けの設定例」をご覧ください。

 

sources.listファイルの各行は、少なくとも3つのフィールドから構成されています。

 

1番目のフィールド

1番目のフィールドはパッケージのタイプを表しています。

deb      バイナリーパッケージ(バイナリファイルの入ったパッケージ)
deb-src  ソースパッケージ(ソースコードの入ったパッケージ)

  

2番目のフィールド

2番目のフィールドはリポジトリのURLです。
記述例ではインターネット上のリポジトリになっていますが、CD-ROM等をリポジトリに指定することもできます。

http:// Webサーバー上のリポジトリhttps:// で始まる場合もあります。)
ftp://  FTPサーバー上のリポジトリ (ftps:// で始まる場合もあります。)
file:// PC上のリポジトリ
cdrom:  CD_ROM、DVD-ROM、Blu-rayディスク

 

3番目のフィールド

3番目のフィールドは、指定するリポジトリの構造によって記述の仕方が異なります。
ハンドブックによると、サブディレクトリが無いリポジトリなら「./」を指定することもできるそうですが、大抵のポジトリは階層構造になっています。

 

(比較) リポジトリの構成とsources.listの記述

理化学研究所リポジトリを見ると、Debian 10 (buster) のある場所は以下のとおりです。

http://ftp.riken.jp/Linux/debian/debian/dists/buster/

そして、このbusterディレクトリの中に「main」ディレクトリ、「contrib」ディレクトリ、「non-free」ディレクトリがあります。

 

このリポジトリを利用する場合、sources.listには以下のように記述します。

deb http://ftp.riken.jp/Linux/debian/debian buster main contrib non-free

理化学研究所のURLにある「dists」ディレクトリを記述する必要は無いようです。

 

3番目のフィールドは、Debianコードネーム版(stable、 testing、 unstable等)です。コードネームで記述する場合、Debian 10 のコードネームは busterなので、次のようになります。

deb http://ftp.riken.jp/Linux/debian/debian buster main contrib non-free

 

版で既述する場合、次のようになります(stable版を指定した場合)。

deb http://ftp.riken.jp/Linux/debian/debian stable main contrib non-free

 

 

Part 4 : /etc/apt/sources.listの設定例

stable版向けの設定例

# Security updates
deb http://security.debian.org/ buster/updates main contrib non-free
deb-src http://security.debian.org/ buster/updates main contrib non-free

# Base repository
deb http://ftp.riken.jp/Linux/debian/debian buster main contrib non-free
deb-src http://ftp.riken.jp/Linux/debian/debian buster main contrib non-free

# Stable updates
deb http://ftp.riken.jp/Linux/debian/debian buster-updates main contrib non-free
deb-src http://ftp.riken.jp/Linux/debian/debian buster-updates main contrib non-free

# Stable backports
deb http://ftp.riken.jp/Linux/debian/debian buster-backports main contrib non-free
deb-src http://ftp.riken.jp/Linux/debian/debian buster-backports main contrib non-free

 

上の例では「Security updates」を除き、理研リポジトリを指定しています(Security updatesはミラーサイトには無いため)。


余談ですが、念のためsecurity.debian.orgを調べました。
http://security.debian.org/dists/buster/updates/ の中に「main」「contrib」「non-free」がありました。

 

リポジトリに含まれるパッケージ

大抵のパッケージはベースリポジトリから取得します。ベースリポジトリには全てのパッケージが含まれているものの、更新頻度は少なめで2ヶ月に1回くらいのポイントリリース(バグフィックス等)です。

それ以外のリポジトリ部分的なもので、全てのパッケージが含まれているわけではありません(ただ、新しいバージョンのパッケージを提供するらしいです)。

 

非公式のリポジトリは最後に記述する

欲しいバージョンのパッケージが複数のリポジトリにある場合、aptは(sources.list内で)最初に記述されているリポジトリを利用します。よって、非公式のリポジトリはsources.listの最後に記述します。

 

Security updatesリポジトリ

Debianで使用されているソフトに脆弱性などがあると分かると、それを修正するためのセキュリティアップデートが提供されます。
これを拾ってくるために「Security updates」に記述したリポジトリを使用します(このアップデートはミラーサイトにはありません)。

 

Stable updatesリポジトリ

Stable updatesリポジトリは、主に重大なバグに対するバグフィクスを提供します。なお、stable版のポイントリリース(ベースリポジトリのポイントリリース)よりも早くアップデートを提供してくれるそうです。

 

Stable backportsリポジトリ

Stable backportsリポジトリには package backports があります(package backportsとは、古いディストリビューション(通常はstable版)向けに再コンパイルした最近のソフトのパッケージだそうです)。しかし、意図的に指定しないとaptはpackage backportsをインストールしてくれません。

 

ハンドブックには以下の2つの方法が記載されていました。

$ sudo apt-get install パッケージ名/buster-backports
$ sudo apt-get install -t buster-backports パッケージ名

 

main, non-free, contrib

パッケージがどのようなライセンスに従っているかに応じて、「main」、「non-free」、「contrib」に分かれているらしいです。

  • mainは、DFSG(Debian Free Software Guidelines)に準拠しているもの。
  • non-freeは、DFSGに完全には準拠していないが、制約なしに配布することができるもの(公式にはDebianではない)。
  • contribは、オープンソースだがnon-freeなものを必要とするパッケージ。

 

(補足)
contribの説明に登場するnon-freeなものの例として、ハンドブックには次の例が挙げられています。
・ゲームのROM、コンソールのBIOS
コンパイルするのにプロプライエタリなソフトを必要とするもの

LinuxのGUI環境(X Window System、ディスプレイマネージャ、ウィンドウマネージャ、デスクトップ環境)

今までテキトーに使っていたので、少し真面目にLinuxGUI環境に関する知識を整理してみました。この記事の構成は以下のとおりです。

 

 

 

Part 1 : X Window System

X Window Systemとは?

X Window Systemを簡単に言うと、グラフィカルな環境を提供するためのクライアントサーバー型のシステムです。このシステムでは、X11というプロトコルがクライアントとサーバーの通信に使われます。なお、このシステムにおけるサーバーをXサーバーといい、クライアントをXクライアントと言います。

 

このうち、Xクライアントは、ブラウザやエディタ等、個々のソフトです。Xサーバーは、各Xクライアント間の調整やユーザー側とXクライアントの仲介をするものです。


たとえば、ユーザーがキーボードで文字を入力するとエディタに文字が表示されますね。この時、キーボードからの入力を受け取るのはXサーバーです。Xサーバーは受け取った入力内容を(X11プロトコルを使って)Xクライアントであるエディタに伝えます。すると、エディタ上に文字が表示されます。

 

今の例だと「キーボード  →  Xサーバー  →  Xクライアント」という一方向の説明にしかなっていないので少し補足します。「エディタに文字が表示される」のは、エディタがXサーバーに対して「(ユーザーが見ている)画面にこれを表示してください」と依頼しているからです。つまり、「Xクライアント  →  Xサーバー  →  画面」という処理も行われているということです。

 

X Window Systemに関する用語

ネット上を見ると、X Window Systemに関する用語は結構アバウトに使われています。

 

たとえば、「X11をインストールする」という表現を普通に見かけます。しかし、用語に注意を払って記述されている文書を読むと、X11とはXプロトコルのバージョン11であると説明されています。これを前提にすると、先の表現は「Xプロトコルのバージョン11を実装したX Window Systemをインストールする」と書いた方がいいのかもしれません。

 

でも、表現が無駄に長くなっただけのような気がしなくもありません・・・^^;。
個人的には、文章の読み手に誤解を与えなければ「X11をインストールする」でも良いと思います。


という個人的な意見を述べた上で、調べたことを以下に記します。

 

「X」

単に X とだけ書かれている場合、以下の可能性がありそうです。
X Window System(X というウィンドウシステム)を指している。
・Xサーバーを指している。
・Xというプロトコルを指している(専門的な文書でなければ、この可能性は低そう)。


X11

X11はXプロトコルのバージョン11を指す言葉です。XサーバーとXクライアントはこのプロトコルを使って通信します。

しかし、「X11を実装したX Window System」や「X11を実装したXサーバー」の意味でも使われているようです。

 

このプロトコルに関する文書
https://www.x.org/releases/current/doc/xproto/x11protocol.html


「Xlib」

アプリケーションやツールキットが利用する、Xプロトコルを実装したクライアント用ライブラリのこと。


「Xサーバー」

X Window Systemにおいて、接続しているXクライアント間の調整や、ユーザー側とXクライアントの仲介を担う仕組み(またはその実装)。


Xorg

オープンソースで実装されたXサーバーです。
Xorg(Xの次は小文字のオー)は現在主流のXサーバーでX.Org(Xの次はドットと大文字のオー)によって開発されています。
(余談ですが、私が昔Linuxで遊んでいた頃は、XFree86が主流でした)。

  

X Window Systemの名前の由来

X Window Systemの名前の由来が以下のPDFに書かれていました。
https://apps.hci.rwth-aachen.de/borchers-old/cs377a/materials/p79-scheifler.pdf

このPDFによると、かつて W Window Systemというものがあったらしく、X Window Systemの階層的な仕組みはW Window Systemから来ているそうです。W Window Systemの「W」に対する言葉として(アルファベット順でWの次の)「X」になったようです。

 

 

Part 2 : ディスプレイマネージャ

ディスプレイマネージャとは?

ディスプレイマネージャは、グラフィカルなログイン画面を提供するソフトです。
Linuxを起動すると、通常はコンソールでログイン画面が表示されますが、ディスプレイマネージャを利用するとグラフィカルなログイン画面が表示されます。

 

メジャーなディスプレイマネージャ

ネット上の記事でよく見かけるものとしては、XDM、GDMKDMなどがあります。

ただ、XDMについてビミョーに気になることがあります。X11 R7.6のmanページにはxdmの記載があるのですが、X11 R7.7のmanページにはxdmの記載がないんですよね。はて?

 

SLiMについて

SLiMというディスプレイマネージャもそこそこ有名なのですが、ArchLinuxのWikiを読むと「SliM プロジェクトは活動を停止しています (プロジェクトのホームページ に繋がらない状態となっており、github のミラー も動きがありません)。また、logind セッションなど、SLiM は systemd に完全には対応していません。他のディスプレイマネージャや Xinitrc を使うようにしてください。」と書かれています。

 活動を停止しているとなると、仮にセキュリティホールが見つかっても対応されないと思いますので、使わない方が良さそうです。

 

 

Part 3 : ウィンドウマネージャ

ウィンドウマネージャとは?

ウィンドウマネージャは、グラフィカルな画面に表示されているウィンドウの管理(サイズ変更、移動、削除など)を担うものです(ここでいうウィンドウとは、画面上にある各ソフトを指しています)。

 

そもそも、X Window Systemはグラフィカルな表示機能を提供しますが、それだけしかしません。表示された個々のウィンドウをマウスで移動したり、サイズを変更したりする機能は提供しないのです。この部分を担当しているのがウィンドウマネージャです。

 

この点に関しては、次の記事が非常に分かりやすいです(必読!)。
https://qiita.com/ai56go/items/1b8bfeede2b467ac0667

 

古いですが、次のページも参考になります。読みものとしても面白いです。

https://linuxjf.osdn.jp/JFdocs/XWindow-Overview-HOWTO/window-managers.html
このページによると、ウィンドウマネージャっていうのは『メタクライアント』だ。その一番基本的な 任務は他のクライアントを管理することなんだ。」とのことです。

なお、このページは、X Window Systemアーキテクチャをざっくり説明する文書の一部です。

 

メジャーなウィンドウマネージャ

Linuxで使えるウィンドウマネージャは沢山ありますので、以下のページをご覧ください。

ウィンドウマネージャ一覧
このページはArchLinux関連のページですが、Linuxで使える様々なウィンドウマネージャが並んでいるので便利です。また、スタック型のウィンドウマネージャとタイル型のウィンドウマネージャに関する説明もあります。

 

 

Part 4 : デスクトップ環境

デスクトップ環境を明確に説明するのは難しいですが、ざっくり言えば、必要なソフトが一通りそろっていて、マウス操作で便利に使えるようになっている環境です。たとえば、WindowsMacBookのデスクトップ画面をイメージしてもらえば良いかなと思います。

 

Windowsのようにマウス操作であれこれできるようになっていますので、当然ですがデスクトップ環境にはウィンドウマネージャ(の機能)も含まれています。

 

Linuxのデスクトップ環境としては昔からGNOMEKDEが有名です。

この2大勢力のほかにも、XfceEnlightenmentなど様々なデスクトップ環境があります。

 

  

Part 5 : 参考にしたページ

X Window System関係

EXPLANATIONS
個人的にイチオシX Window Systemについて学ぶのにとても良いページです。用語に注意を払って文章を書いている点も良かったです。なお、後ろの方にコードも登場します。

私は、以下の3つのパートだけを読みました。
・BASIC ARCHITECTURE
・REQUESTS AND EVENTS
・LET'S GO


ウィキペディアの「X Window System」の項目
日本語で読めますし、ざっくりとした理解をするには良いかなと思います。XサーバーとXクライアントの図が分かりやすいです。


KENスクールブログの記事
説明が簡潔で分かりやすいです。ディスプレイマネージャ、ウィンドウマネージャ等の説明もあります。

 

サルでも分かるX11入門
タイトル通り、読みやすいです。

ディスプレイマネージャ関係

Linux - Display Manager
ディスプレイマネージャからX Window Systemが起動する流れだけでなく、X Window Systemに関する設定ファイルの説明も書かれている点が良いです。

 

ディスプレイマネージャの種類

Linuxが起動してからディスプレイマネージャが実行されるまでのシーケンスが簡単に書かれています。

 

ディスプレイマネージャの概要

ディスプレイマネージャ経由でX Window Systemが起動するまでの流れが少し詳しく書かれています。

 

このページによると、コンソールでLinuxシステムにログインする際は、init、getty、loginが水面下で仕事をしているそうですが、ディスプレイマネージャはグラフィカルな画面でこの3つに相当する役割を果たしているそうです。

 

initLinux上で最初に実行されるプログラムで、起動時に各種スクリプトを実行したり、gettyを起動したりします。


gettyについては良く分かりません。manページによると「ttyポートを開いて、ログインネームの入力を促し、loguinコマンドを実行する」そうです。

 

(追記)

gettyに関して以下の2つのページを見つけました。チラ見したところ何となく参考になりそうなので、後で読んでみます。

 

 

 

<さりげなくDebian関係のリンク>

XWindowSystem - Debian Wiki

このページにある各種リンクが役立ちそうです。まずは「Xorg」と「Xinitrc」から。

 

DisplayManager - Debian Wiki

GNOMEKDEを使う予定は無いので、LightDMにしようかなと思っています。

 

DesktopEnvironment - Debian Wiki

タイトルはDesktopEnvironmentですがウィンドウマネージャ等の記載もあります。

Debian環境設定(3) 起動時にNumLockをONにする

コンソール画面でテンキーを使ったら数字が入力されなかったので、NumLockがOFFになっていることに気づきました。そこで、NumLockをONにする方法を調べました。

 

環境

Debian 10 (buster)on VirtualBox 6.1.6

 

setledsコマンド

ネット情報によると、以下のコマンドが使えそうです。

setleds

manページを読むと、このコマンドは、NumLockキー、CapsLockキー、Scrollキーの挙動を設定するものでした。
NumLockをONにする場合は、以下のようにします。

setleds +num

毎回コマンドを実行するのは面倒なので、このコマンドをホームディレクトリの.profileに記述しました。
実験がてら一度ログアウトして再ログインしたらNumLockがONになっていました。解決です。

 

-Dオプション

manには、 -D オプションについて以下の説明があります。

With option -D, setleds will change both the VT flags and their default settings (so that a subsequent reset will not undo the change). This might be useful for people who always want to have numlock set.

これが正しければ、-D オプションを付けてsetledsを実行することによりデフォルト設定が変更されるはずです。
そこで、rootユーザーでログインし直して、

setleds -D +num

を実行してみました。

しかし、ログアウトしてから再ログインするとNumLockがONになっていませんでした。この点がやや謎ですが、.profileにコマンドを記述しておけば実用上の問題は無いので、深く考えないことにしました^^;。

 

manページの説明(一部抜粋)

Name
setleds - set the keyboard leds

 

Synopsis
setleds [-v] [-L] [-D] [-F] [{+|-}num] [{+|-}caps] [{+|-}scroll]

 

Description
Setleds reports and changes the led flag settings of a VT (namely NumLock, CapsLock and ScrollLock). Without arguments, setleds prints the current settings. With arguments, it sets or clears the indicated flags (and leaves the others unchanged). The settings before and after the change are reported if the -v flag is given.

 

(中略)

 

Options
-num +num
Clear or set NumLock. (At present, the NumLock setting influences the interpretation of keypad keys. Pressing the NumLock key complements the NumLock setting.)

 

-caps +caps
Clear or set CapsLock. (At present, the CapsLock setting complements the Shift key when applied to letters. Pressing the CapsLock key complements the CapsLock setting.)

 

-scroll +scroll
Clear or set ScrollLock. (At present, pressing the ScrollLock key (or ^S/^Q) stops/starts console output.)

 

Debian環境設定(2) キーボードレイアウトを変更する

記号を入力しようとしたら、自分が意図したものとは違った記号が画面に表示されました。キーボードの設定がおかしいようです。そこで、キーボードレイアウトの設定を変更しました。

 

環境

Debian10 (buster)  on VirtualBox6.1.6
キーボードは REALFORCE A / R2A-US3-BK

 

問題点

Debianをインストールする時、ロケール設定をJapan / Japanese にしたので、キーボードレイアウトの設定がJIS配列(日本語配列)となっています。しかし、自分が使っているキーボードはUS配列(英語配列)です。
よって、US配列キーボードに適した設定に変更する必要があります。

 

設定ファイル

ネット情報によると、キーボードレイアウトを設定しているファイルは

/etc/default/keyboard

らしいです。

このファイルの中にある次の2行を変更しました。

XKBMODEL
XKBLAYOUT

 

変更後は以下のとおりです。

XKBMODEL="pc105"
XKBLAYOUT="us"

 

(追記)US配列のMacBookで使う場合は以下の設定で動作しました。

XKBMODEL="macbook79"

XKBLAYOUT="us"

  

スクリーンショット

 /etc/default/keyboard の中身

f:id:philojuan:20201220070507p:plain