System)LinuxのX11に関する世界観です。GNOMEとKDEに関してはGNOMEの世界観とKDEの世界観に分割しました。多くのLinuxディストリビューションの課題として言えるのが、Windowsのような「デスクトップ用途」でのシェア拡大である。Linuxデスクトップ開発者は、いつかLinuxがWindowsと同じデスクトップ用途で使われることを夢見て、Linuxデスクトップの開発を続けてきた。それが報われる日は遠い。XP(2.22%)よりも少ない。31では、GNOMEとXサーバ(XWayland)の完全な分離、PipeWireによるJack/PulseAudioのリプレース、Flatpakによるアプリケーションデプロイの本格化などを目指している。技術評論社を参考に執筆しました。)Linuxデスクトップがなぜ使われないかLinuxデスクトップがなぜ使われないか。それは、「わざわざWindowsからOSをLinuxに変えるメリットや必要性がない」ということである。現状のLinuxデスクトップは、ただ「面白そうだから」使ってみようという人であふれており、そうした人々は少しLinuxを試した上で、「Windowsと何も変わらない」と思って、「わざわざLinuxを使う必要性がない」ということに気付いて、定住せずにまだWindowsの元居た古巣に戻ってしまう。して、WindowsユーザーをLinuxに「移住」させるには、新しい家として「定住」するに足るメリットを示さなければならない。PhotoshopやIllustratorのような「使えるアプリケーション」は、Windowsにはあっても、Linuxにはない。あったとしても、知名度が無く、使えるような雰囲気がしないのである。5だけを試して、Windowsに戻る。僕が思うに、Linuxデスクトップの使いやすさや品質は、年を経るごとに向上していると思う。3はスマホの画面操作などを取り入れて「スマートなシェル」を提示した。5も、Windowsっぽかったインターフェースを改め、Windowsよりも美しい統一感のあるデザイナブルなインターフェースになった。Deepinのような新しいデスクトップ環境がどんどん生まれており、UbuntuやFedoraの公式フレーバー(最初からデスクトップ環境をカスタマイズして変えてある環境)にも採用されている。そのうち、これらのひとつが流行して、Linuxデスクトップが「きちんと使われて流行る日」は来るのではないかと僕は期待している。LibreOfficeを無料版のMS-Officeとして、「こちらの無料版のOfficeを使いましょう」と言っている人間は、何も分かっていない。パソコンを使う仕事で、MS-Officeの入っていないパソコンが事務用途で使えるわけがなく、どこでもMS-Officeはプリインストールで導入されている。要するに、「WindowsにMS-Officeが入っているのは当たり前」なのである。そのMS-Officeの入ったパソコンをLinuxのLibreOfficeに変えるということは、MS-Officeを失うことに等しい。Linuxデスクトップユーザーになることは、LibreOfficeを手に入れたメリットよりも、MS-Officeを失った不利益の方が大きい。単純にLinuxデスクトップは使われないのである。して、MS-Officeを失った不利益よりも、LibreOfficeを手に入れたメリットの方を向上させれば、いつか使われるものになるだろう。要するに、今のLinuxは、「無料のものをあげましょう」と言っておいて、有料のすでにあるものを奪っていく行為に等しいのである。ここをどうにかして、有料のWindowsよりも優れたものを与えるようなOSにすれば、Linuxデスクトップは使われる日が来るだろう。ツールキットとビューの面白さXやWindowsに言えることとして、「ツールキットやビューの面白さ」というのがある。昔はファイル一覧を見るのも、コンソールでlsを実行するなど、テキストベースのビューで閲覧するのが普通だった。grepやsedを使ってフィルター処理を行い、bashなどにパイプで渡すなど、「コマンドとテキストで行うから便利な側面」というのも確かにある。GTK/QtアプリケーションやWindowsアプリケーションは、リストビューやツリービューやアイコンなどの「専門のコントロール」すなわち「ツールキット」を用いてアプリケーションを構築する。ウィンドウにはタイトルバーがつき、大きさや重ね合わせを変えられる。これは、プログラミングを行う上でも面倒くさい仕組みで、GTKやQtのGUIフレームワークの仕様を覚えなければならず、多くの場合コマンド・テキストベースよりも複雑で理解し辛いプログラムになる。Windowsの画期的な点とは、こうしたツールキットやビューの面白さにある。インタラクティブにマウスに反応し、さまざまな「細かい作業」のできるGUIツールキットを使ったアプリケーションは、使うのがとても面白いのである。した「ツールキットとビューの面白さ」は、LinuxやUNIXにはもともと無かったものだが、X11でGTKやQtを使うことで、これを存分に楽しむことができる。GTKやQtはソースコードが公開されているため、「自分でツールキットを作る」というまた別の面白さが存在する。Systemは、あらゆるGUIシステムの祖父ではないが、多くのGUIシステムにとっては先祖のような存在である。UNIXユーザーにとってはXはおなじみの存在で、MotifはXで動いていることが多い。Xの利点は移植の容易さであり、機能も豊富である。欠点は、複雑で、使うのが面倒なことである。Series)を参考に執筆しました。)デバイスとの通信とイベント駆動X11はディスプレイ、キーボード、マウスなどのデバイスを管理し、それぞれの通信を処理して、2Dグラフィックスの「ウィンドウ」をディスプレイに表示し、マウスやキーボードなどでデバイスからの操作や要求があった場合は、「イベント」としてそれらを処理する。X11の担当範囲はカーネルの担当範囲と重なることがある。グラフィックチップ・グラフィックボードなどの設定は、X11で設定する必要がある。最近は、モジュールによって自動的に読み込まれることが多い。ネットワーク透過とXサーバー・XクライアントX11ではネットワーク透過と呼ばれる、ネットワーク処理をXサーバーとXクライアントの間で行う。これをネットワーク透過と言う。Xサーバーは自分の使うマシンで動作するが、Xクライアントは自分のマシンではなくても、ネットワーク上にあるどのマシンのXクライアントとも、ネットワークと繋いで自分のXサーバーから表示・操作することが出来る。マウス移動や文字入力などのイベントはXサーバーで処理されて、ディスプレイにマウスカーソルや(システムのフォントを用いた)文字を表示する。クリックなどのイベントは個別のXクライアントのウィンドウにイベント駆動で送られる。Xプロトコルにより、Xはネットワーク透過な通信をXサーバーとXクライアントの間で行う。Xサーバーで発生したイベントは、マウスやキーボードなどのデバイスと、クライアントであるXアプリケーションの間でやり取りされ、その間で通信を行う。X11のネットワーク透過は、グラフィックス操作におけるネットワーク分散処理を可能にする。これは古い技術だと思われることが多いが、コマンドラインでSSHを実行するのと同様に、GUIでの操作や処理において早い段階からネットワーク通信をベースにした設計がなされているという点では、Windowsなどの競合システムよりも優れた点かもしれない。XlibとGUIツールキットXlibは、クライアント向けのライブラリで、Xプロトコルの詳細を知らなくても、XクライアントがXサーバーと通信ができるようになっている。Xlibでは、イベント駆動としてメッセージループと呼ばれる仕組みを使う。APIなどと同等のシステムで、何かのイベントがそのプログラムに常に送られ続ける、というループを条件分岐で処理することで、メッセージを監視・処理することで、1つのループとしてクライアントプログラムを書くことができる。XlibでXアプリケーションを書くことはできるが、Xlibにはボタンやメニューなどの「ウィジェットツールキット」が用意されていない。このため、通常はGTK+やQtのような、Xlibを用いて作られたGUIツールキットと呼ばれるボタンやメニューなどのウィジェットが用意された多重階層のライブラリを使ってウィンドウを表示するGUIプログラムを開発する。ウィンドウマネージャとデスクトップ環境X11におけるGUIの操作性は、ウィンドウマネージャと呼ばれるサードパーティのプログラムに任されている。プログラマは独自のウィンドウマネージャを作ることができる。これによって、X11ではどんな操作性を実現したウィンドウマネージャでも自由に開発できる。ウィンドウマネージャはウィンドウの操作を担当するが、Windowsのような近代的なシステムでは、ファイルマネージャや端末エミュレータなどを、統一された操作性で実現する必要がある。設定やファイルシステムを仮想化する手段も必要であり、CORBAのようなコンポーネントの利用とその準備も実現する必要がある場合がある。これを統合デスクトップ環境、あるいはデスクトップ環境と呼ぶ。統合デスクトップ環境には、商用UNIXなどで用いられるCDEや、オープンソースなKDEやGNOMEなどが存在する。言ってみれば、WindowsやMacのようなパソコンOSも、その主体となるシステムはデスクトップ環境(Windowsではファイルマネージャを兼ねたExplorerやレジストリ・COMなどのGUIシステム)である。X11のアーキテクチャとトピック概要(アーキテクチャ)X11のアーキテクチャに関しては以下を参照のこと。最近はネットワーク透過のないWaylandと言うシステムが代替を目指しています。WikipediaX11の仕組みX11は、ユーザーのコンピュータの入出力デバイス(マウス、キーボード、ディスプレイなど)を監視するXサーバーと、GUIアプリケーションであるXクライアントが、ネットワーク透過なXプロトコルを使って、要求などの応答を通して成り立っている。(HTTPDとは違い、ユーザーのコンピュータがサーバーで、リモートのプログラムがクライアントである、と言うところに注意が必要。ユーザーはサーバーであるXサーバーの画面を操作しながら、リモートのXクライアントをネットワークで操作する。)Xlibは、XクライアントがXプロトコルの詳細を知らなくてもXサーバーと通信出来るようにしたライブラリ。Xlibによるプログラミング処理を見ると、Windowsプログラミングのようなメッセージループによるプログラムになる。普通、Xlibを直接に操作することは無い。ボタンやメニューのようなグラフィックス・ツールキットが用意されていないからである。作られたボタンやメニューを使うためには、GTKやQtなどのツールキットなどを使う。X11は、最近ではWaylandと言うものにとってかわられようとしている。(Xaw)、Motif、GTK+、Qt、Tkなどがある。3.0の下で再許諾いたします。ネットワーク透過とはメッセージのやり取りX11では、ハードウェアを操作しグラフィックを表示するXサーバーと、ウィンドウフォームを描画しGUIプログラムを実行するXクライアントが、「ネットワーク透過」というネットワークプロトコルで繋がっている。こんな設計にしたのか。それは、僕はウィンドウシステムとウィンドウの間でメッセージをやり取りする上で、それをネットワーク通信にするのが自然だから、だと思う。ウィンドウシステムの役割とは、大きく3つある。それはハードウェアの操作、グラフィックスの表示、そしてメッセージのやり取りである。サーバーとしてハードウェアの操作とウィンドウ描画を行うXサーバーと、ウィンドウの内部のグラフィックスの表示を行うXクライアントが、メッセージをやり取りする。このメッセージをネットワーク透過で行うことで、サーバーはSSHのようにネットワークに繋がった他のクライアントとも、「遠隔通信のようにメッセージをやり取りできる」のである。これは僕の勝手な意見だから、設計者がこのように考えて設計した、というものではない。僕が勝手に、「X11のネットワーク透過はこんな意味があるのではないか」と考えた、推測にすぎない。中央処理コンピュータ・X端末のモデルと分散システムとしてのX実際のところ、X11のネットワーク透過は、端末と中央処理コンピュータが分かれていたごろの名残りであると同時に、一種のネットワークを通じた分散システムであると考えられる。UNIXの端末のように、Xアプリケーションのプロセスを大きな処理能力のある中央のワークステーションで行いながら、そのプログラムをたくさんのX端末からネットワークを通じて操作することができる。一種の分散システムとして見れば、さまざまなコンピュータのホストにあるXクライアントを、Xサーバーがそれぞれのコンピュータに役割を持たせながら遠隔操作することができる。これをより発展させたのがWindowsのCOMやGNOMEのCORBAで、さまざまなホストにあるネットワーク上のコンポーネントが連携して、「ネットワーク通信上のさまざまなオブジェクトが相互にメッセージをやり取りしてひとつのシステムとして実行する」ことができる。CORBAではWindowsのオブジェクトとLinuxのオブジェクトがネットワークで別々の言語で相互に通信することもできる。後日注記:X11の優れた点は、ひとつのモニターから遠隔地にある複数のコンピュータを操作できるということ。モニターやキーボードがついていないコンピュータでも、X端末から遠隔操作できる。モニターがついているコンピュータはひとつだけで良い。そのひとつのX端末から、ネットワークで繋がった全てのコンピュータを遠隔操作できる。X11のアプリケーションが入っている必要はあるが、さまざまな場所に分散したコンピュータをひとつのX端末から遠隔操作することで、コンピュータがどこにあったとしてもひとつの端末から遠隔操作し、遠隔地にあるコンピュータシステムを管理することができる。コマンドとXアプリケーションの違いコマンドプログラムとXアプリケーションの違いは、コマンドはターミナルに文字を出力し、シェルからコマンドで実行するが、XアプリケーションはXサーバーにウィンドウを表示し、Xサーバーから操作して実行する、ということが異なる。コマンドプログラムは、文字ベースの入出力で操作が完結しているが、Xアプリケーションは「Xサーバー」を介して実行・操作する。Xサーバーが無ければ動かないし、操作もできない。ウィンドウマネージャの役割Xにおいては、「ウィンドウマネージャ」と呼ばれる特別なプログラムが、ウィンドウの操作と実行を管理する。このウィンドウマネージャの役割は大きく2つ。それは「ウィンドウの管理」と「アプリケーションの実行」である。X11におけるウィンドウをどのように管理するかという「ウィンドウマネージメント」の機能と、アプリケーションを実行する「ランチャー」の機能を、ウィンドウマネージャは持っている。X11においてはウィンドウマネージャからXアプリケーションを実行し、ウィンドウマネージャの機能を使って実行されたウィンドウを破棄・表示を切り替えする。コマンドラインにおける「ターミナルとシェル」が、X11における「Xとウィンドウマネージャ」となる。これに加えて、デスクトップ環境では、ファイルマネージャや端末エミュレータなど、さまざまな「GUIアプリケーション」を提供し、一貫した操作法を実現する。MotifとLinuxのGUIツールキットUNIXにおけるGUI環境では、XサーバーをコアにXlibによるプログラミングを行うが、ここではボタンやスクロールバーのような「ツールキットライブラリ」は提供されていない。UNIXでは、長らくMotifというGUIツールキットが標準的で、商用のUNIXワークステーションには、プロプライエタリのXとGUIツールキットのMotif、そしてCDEなどのMotifで書かれた統合デスクトップ環境を乗せるのが一般的だった。初期のGIMPもMotifで書かれていた。最初期のLinuxから見ると、Motifには問題があった。Motifはオープンソースでなく、有償で提供されていたため、Motifで作られたXアプリケーションは、それ自体がフリーでもMotifに依存し、そのため「Motifを購入しなければ使えない」という酷いものだった。最初期のLinuxのX11には標準的なツールキットが無く、Motifに代わるツールキットが必要だった。標準的なツールキットのないX11に、Trolltechという会社がQtと呼ばれる優れたツールキットを提供した。QtはKDEという「CDEのCをKに変えたデスクトップ」で採用されたが、ここでも問題が起きた。Qtも(当時は)フリーソフトウェアではなかったのである。これに問題を感じたGNUでは、GNUの協力者でプログラマであるミゲル・デ・イカザにより、QtではなくGIMPのGTK+を採用した独自の統合デスクトップが開発された。これがGNOMEである。Harmonyという「Qtのオープンソース代替」も作っていたGNUだが、GNOMEの方が成功した。GNOMEでは、CORBAを使うことで、WindowsのCOMのようなコンポーネント分散通信システムを作った。これが、商用Linuxディストリビュータなどに「GNOMEを採用させるきっかけ」を与えた。ミゲルは「UNIXをもっとマシなものにしよう」と提唱した。GTK+はシンプルなC言語のツールキットで、QtがC++を採用しているのとは対照的に、単純なC言語によるツールキットを提供し、C言語でオブジェクト指向を行えるGLib・Gobjectという仕組みを採用している。その上で言語バインディングを提供することにより、さまざまな言語で開発が行える。Windowsでも.NETでC#/VBで開発ができるように、GTK+ではC/C++/Python/Ruby/JavaScriptなど、「多くの言語でGUIプログラミングができる」というところが売りである。そのため、RubyistなどにはGNOMEはとても良い環境である。それぞれのデスクトップが独自に実装するのでは面倒くさいX11の上でGTK+/GNOMEやQt/KDEを動かすのは、「複雑だ」という人が居る一方で、実際のところ、GUI機能をWindowsのようにカーネルに統合してしまうとサーバーで使う時に困るということと、GNOMEやKDEが独自にディスプレイサーバまで実装するのでは面倒くさい、といった感じで、X11だけがディスプレイサーバを実現する、という感じの設計になりました。色んなところが古臭いそもそもがUNIXワークステーションやOpenVMSで動作することが前提で、本当に古臭い昔の技術です。LinuxのおけるX11はそもそもXFree86プロジェクトをベースとしており、UNIXならX11だよねといったとても昔の技術であるため、色んなところで旧来のコンピュータのさまざまな要件にぶち当たります。商用UNIXにも搭載できるライセンスX11は商用UNIXにも搭載できる、BSDライセンスと同様のMIT/Xライセンスを採用しており、各種の商用UNIXワークステーションでも動作する。GNUはこの点を批判しており、「そもそもは自由だったはずのX11の実装が、商用UNIXではプロプライエタリな独自のバイナリになっており、UNIXユーザーはウィンドウシステムを書き換えたりコピーしたりソースコードを自由に見ることができない」として、「GPLではフリーソフトウェアがフリーでなくなることがない」とGNUは言っている。実際のところX11のソースコードはもともとのオープンなX11のソースコードはMITライセンスで公開・配布されているのであり、開発自体もオープンなコミュニティによって行われているため、「ストールマンの言っていることはおかしい」とされることが多い。FreeBSDがフリーでなくなることは考えづらく、「わざわざGPLなんかで配布する意味が無い」とされることの方が一般的である。i386用のフリーなXサーバーの実装は、以前はXFree86として知られていました。Linuxでは、長い間XFree86を標準のXサーバーとして利用してきました。Linuxの書籍などを見ると、設定ファイルやログファイル、コマンドやツールなどの名前に、XFree86の言葉を見ることがあります。Serverという新しいXサーバーになりました。この時、XFree86関連の言葉は削除されました。そのため、昔のホームページなどは、Xの設定ファイルをXF86Configという名前のままでサンプルとして掲載している場合があります。xorg.confという名前では検索してもヒットしない情報でも、XF86Configという名前ならヒットする場合があります。X.orgでは、設計のモジュール化が進み、ハードウェアの自動認識技術が向上したりしています。freedesktop.orgまた、X.orgなどが参画して作られたプロジェクトに、freedesktop.orgがあります。これは、フリーソフトウェアをデスクトップ用途で使う場合に必要となる技術の開発促進を目指しています。freedesktop.orgでは、さまざまな下部プロジェクトが生まれています。ベクターグラフィックスAPIのcairoなどがこれに当たります。GNOMEとKDEの相互運用や共通化も図られ、アプリケーションメインメニューの設定項目の仕様などの共通化が行なわれました。ほかにも、たくさんのフリーなデスクトップ関係のプロジェクトが生まれています。MIT/XライセンスXのライセンスには、MIT/Xライセンスが使われています。これは緩やかなフリーソフトウェアライセンスで、GPLのようなコピーレフトのライセンスではありません。GNUが述べるように、Linux上のX11がフリーで配布されていたからといって、派生ソフトウェアの商用のX11がフリーで使えるとは限りません。多くの商用UNIXでは、プロプライエタリなX11が搭載されており、フリーに改造や再配布を行うことはできません。GNUが計画上、ウィンドウシステムを独自に実装するのではなく、既にあるフリーソフトウェアを積極的に使用しようとして、GNUではX11を採用することを決めました。プロプライエタリに配布されるX11が必ずしもフリーではない、とGNUは主張しますが、MITライセンスではクローズドな商用ソフトウェアにX11をコンポーネントの一部としてフリーにせずに組み込むことができます。このため、商用のOSの一部としてXを採用することができます。商用ソフトウェアとしては、使いやすいライセンスです。同じことは*BSD系のフリーUNIXが採用しているBSDライセンスにも言えます(MITライセンスとBSDライセンスは条項などがほとんど同じです)。このため、AppleのDarwin(Macのカーネル)やSONYのゲーム機であるプレイステーションなどには、BSDライセンスのFreeBSDの技術が使われています。(DarwinではMachとFreeBSDのコードを元に、オープンソースでmacOSのUNIX系カーネルを開発しています。)XのソースコードX11のソースコードX11のソースコードは以下から参照できる。カーネルと併せてコードを見ることで、実際のところどんなプログラムが低レベルな領域で動いているのかを確認できる。GTK/GNOMEやQt/KDEの開発がしたい時も、ウィンドウシステムのコードを知ることで、実際にどんなことがデスクトップ環境で行われているのか、全貌を概観できる。gitWaylandのソースコードちなみにWaylandのコードは以下から参照できる。GitLabXlibによるプログラミングXlibX11とXアプリケーションのやり取りをするライブラリ。これを使うことで、Xプロトコルの詳細を知らなくてもXアプリケーションが作れる。GTK+やQtはこれを使って実現されている。内容はWindowsプログラミングと良く似たメッセージループを利用する。WikipediaXlibサンプルコード以下はXlibのサンプルコード。Programmingからの引用。(%i,%i)\n",event.xbutton.x,event.xbutton.y);}}}XNextEvent関数によって次のイベント(マウスやキーボード、ウィンドウの変化などでイベントが発生した時にメッセージを与える)を取り出すことができる。event.typeがExpose(再描画要求)になった時やButtonPress(マウスボタンが押された)になった時などに応じて、適切な処理を実行している。Xlibをもっと詳しく知りたい以下が参考になります。SystemのC言語バインディングで、Xlibを置換することを目的としている。ライブラリサイズを小さくし、単純化すること、Xプロトコルに直接アクセスすることを目的としている。WikipediaXディスプレイサーバの設定xorg.confX11の設定ファイルです。最近はハードウェアを自動認識するため、あまりいじることはありませんが、昔から超複雑で、一番厄介な設定ファイルです。初心者にはさっぱりです。リファレンスガイドより編集して引用。3.0の下で再許諾いたします。itLifeTipsを参考に執筆しました。"section-name"~EndSectionは各セクションを表し、各セクションはエントリ行から成り立つ。エントリはオプション名と1つ以上のオプションから成り立つ。グローバルな設定をし、ServerLayoutの設定で上書きされる。Xサーバで制御される入力・出力用のデバイスを定義する。1つの出力デバイス(スクリーン)と2つの入力デバイス(キーボードとマウス)を指定する。Screenはモニタを、2つ以上のInputDeviceはマウスとキーボードを表す。Xサーバがxfsフォントサーバからフォントを取り出すパスを指定する。ロードされるモジュールを指定する。各InputDeviceセクションで入力デバイスの設定をする。以下のオプションがある。ビデオカードの設定をする。ビデオカードバスの位置を指定する。Deviceセクションが設定するビデオカード上のモニタコネクタを指定する。各Screenセクションでは、1つのビデオカードを、DeviceセクションとMonitorセクションを参照することにより1つのモニタに結合します。特定の色の深さで利用できるスクリーンモードを指定する。複数のDisplayセクションを持つことができる。Infrastructure)用のパラメータを指定する。DRIDRIについてはOpenGLを参照のこと。DRIはXクライアントがXサーバを経由せず直接グラフィックアクセラレータにアクセスし、高速な描画を実現するための仕様。OpenGLライブラリであるMesaなどが利用している。3.0の下で再許諾いたします。ログインとセッションstartxXサーバーを起動するコマンド。.xinitrcや起動スクリプトを実行する。カスタマイズすることで、Xサーバーが起動する時に実行するアプリケーションやウィンドウマネージャを設定できる。.xsession端末のX画面(ディスプレイマネージャ)にログインした時に実行される初期化スクリプト。.xinitrcstartxでXを起動した時に実行される初期化スクリプト。ArchWikiにサンプルコードなどがあるため、そちらを参照のこと。Makerを起動したければ.xinitrcに以下のように記述する。Makerが起動する。必要に応じて日本語入力メソッドなどの設定を.xinitrcに記述する。xmonadなどが設定できる。ArchWikiより編集して引用。1.3以降の下で再許諾いたします。複数のデスクトップ環境をインストールしている場合、GDMなどのディスプレイマネージャでログインする時に、セッションを選択することができる。X11付属アプリケーションtwm非常にシンプルな、X11標準のウィンドウマネージャ。xterm同じくシンプルな、X11標準のターミナルエミュレータ。色んなX11の付属アプリケーションxclockは時計。X11にはこうしたさまざまなオマケアプリケーションがある。twmで使うと面白いのでぜひ体験してほしい。Xはtwmでxtermやxclockなどを使うと、軽くてカッコいい。Qiitaを参考に執筆しました。デスクトップにマウスを追いかける猫が現れるツールキットツールキットとはツールキットは「道具箱」という意味で、X11でGUIプログラミングを行う際に、Xlibの上で動いてくれるさまざまなGUIの部品(パーツ)のこと。通常、UNIXではX11の上でMotifのようなGUIツールキットを用いてGUIのアプリケーションを開発する。Moitfはフリーではなかったため、GTK+やQtのようなフリー版のツールキットが開発されている。(Xaw)、Motif、GTK+、Qt、Tkなどがある。APIのクローンとしてはWine、NeXTSTEPのクローンとしてはGNUstepなどがある。CoreではWindows.Formsもオープンソースで提供される予定であり、期待が高まっている。(Xt)ウィジェットを作成するのに必要な機能を提供するXlibの上位ライブラリ。特定のウィジェットの実装は、より上位のライブラリ(XawやMotif)で行われる。Athenaで開発されたX11のGUIツールキット。Motif商用UNIXで使われる、昔支配的だったツールキット。初期のGIMPなどは、GTK+で書かれる前はMotifを使用したコードで書かれていた。スタイルに味があって一部では人気である。GTK+GIMPによって開発された、本当にフリーなGUIツールキット。GNOMEで使われており、GLibによってC言語を用いながらオブジェクト指向を行い、さまざまな言語で利用できるラッパーライブラリ(バインディング)を提供する。このため、C/C++だけではなく、C#、Java、Perl、Python、Ruby、JavaScript、Valaなどからも使うことができる。それぞれのバインディングに開発状況の差があり、必ずしも安定して使えるとは限らないため、標準的に使われるのはC/C++によるGTK+/GTKmmである。GTK+の世界観を参照のこと。QtTrolltechという会社によって提供されたGUIツールキット。標準的ツールキットのないLinuxのためのツールキットだったが、残念ながらフリーとは言えなかった。KDEで使用されたが、Qtがフリーではないため、GNOMEプロジェクトが発足した。現在では、Qtはオープンソースのライセンスを採用し、名実ともにフリーソフトウェアとなった。Linuxの他にWindowsでも動くクロスプラットフォームなツールキットとして知られる。開発に使用できる言語はC/C++のほか、Pythonなど。テーマやスタイルが表現豊かで美しく、その名の通り「キュートなツールキット」として知られる。GTK+はQtと比べてはるかに醜い。Qtの世界観を参照のこと。Tk主にTcl/Tkとして使われることの多いツールキット。昔のMozillaなどはブラウザ画面の表示にTkスタイルのボタンやテキストボックスのスタイルを採用していた。(当時のMozillaは標準では日本語の太字すら出ない、開発途上のブラウザだった。WikipediaソースコードgitFLTKツールキット。WikipediaテーマエンジンGTKやQtなどのGUIツールキットでは、テーマエンジンを搭載しており、テーマを変えることでアプリケーションの見た目を変えることができる。GTKアプリとQtアプリの見た目が異なる問題GTKアプリケーションとQtアプリケーションでは、テーマエンジンが異なるため、アプリケーションのルック&フィールが異なってしまう。これについては以下のような記事が参考になる。ArchWikiデスクトップ環境メタファーと環境の実現X11のデスクトップ環境について言えることは、「メタファーの実現」である。メタファーとは隠喩のことで、コンピュータを現実のものに喩えた「デスクトップ」あるいは「ワークスペース環境」を提供する。GNOMEやKDEは、既存のWindowsやmacOSのようなデスクトップOSの操作環境と基本的には同一の、デスクトップ環境を構成するGUIアプリケーションをひとまとめに開発しており、一定の共通性のあるルック・フィールでデスクトップを操作できる。メタファーの実現は重要で、コマンドラインでは「シェルとコマンドとファイル」によって実現されていた「コマンドライン環境」が、GNOMEやKDEではファイルマネージャやランチャーやウィンドウマネージャによって全く違う「GUI環境」に変貌する。LinuxはGUIの分野ではコマンドラインほどの目立った成果は得られていないが、そのためにかかる開発のコストや手間はコマンドラインより大きく、さまざまなGUIアプリケーションをウィンドウマネージャや基礎のアーキテクチャ(ライブラリやフレームワーク)の基に実現している。9のように分散ネットワーク上でGUIアプリケーションを実行できる。GNOMELinuxで実行出来る巨大なデスクトップ環境の1つ。シンプルで使いやすい、一般ユーザーに分かりやすい操作性と、CORBAを使用したネットワークオブジェクト指向なアーキテクチャを提供する。巨大なコンポーネント指向のデスクトップであるため、昔から動作が遅く「もっさり」しており、またデザインがのっぺりとしていてダサい。動作が遅いだけではなく、何をするにも到達するまでのステップが一息遅い。一般ユーザー、時にパソコン初心者のことを良く考えており、余計なものがなく簡単に使える、シンプルなデスクトップを目指している。最近ではSunがやっていたように、UNIXワークステーションの環境でもGNOMEが使われることが多くなってきている。GNOMEがKDEよりも標準的に採用されることが多い理由は、こうしたUNIXワークステーションベンダーが会社としてGNOMEを支持する傾向が強いからである。明らかにKDEの方が優れているのに、馬鹿なGNOMEを標準的に採用する。3はオリジナル要素が強い。逆にKDEは個性を失い、美しくなったように見えてWindowsと全く同じものになった印象がある。GNOMEの世界観を参照のこと。KDELinuxで実行出来るもうひとつの巨大なデスクトップ環境。機能性とQt/C++による整理されたフレームワーク、美しくて使いやすくカッコいいデスクトップ環境が特徴。美しい代わりメモリを食うことで知られており、またGNOMEに比べて不安定なところがある(GNOMEは遅くても起動するが、KDEは起動すらしない場合が多い)。「本当のLinuxのデスクトップ」を目指しているが、Qtを採用しているため、FirefoxのようなGTK+アプリケーションと調和せず、「美しいようでそんなに美しくない」デスクトップ環境である。KDEの世界観を参照のこと。CDEUNIXワークステーションで使われることの多い統合デスクトップ環境。Motifをツールキットとして採用する。KDEはそもそもはこのCDEを模倣して作られた。XfceXfceは意外と人気がある。僕は、みんなが使う時のことを考えると、UbuntuでXfceかMATEを使ってもらうのが一番良いと思う。昔使っていたところで考えると、本当に軽くて使いやすいのだが、何かがチープで、シンプル過ぎて一人前のデスクトップ環境として使えないような、そんな印象を受ける。UNIXのメタファーを尊重し、それぞれを単機能で小さなプログラムにする、という発想は、とても良い発想だと思う。Xfceの世界観を参照のこと。LXDE/LXQt軽量さを目指しているデスクトップ環境。僕は機能性を考えるとMATEの方が良いと思う。AndroidAndroidはケータイ向けで、僕はスマホで使っていますが、本当はテレビと通信させるなどでも動きます。テレビと通信させる場合は、マウスポインタを使うことも出来ます。3に戻ったようである。マイナーなカスタムDEUbuntuのUnityがやったことで知られていますが、GNOMEやKDEでもMac風のメニューバーを画面トップに持ってくるインターフェースにしている例が、マイナーディストリビューションで見られるようになりました。どのディストリビューションだったかは失念しましたが、探してみてください。マイナーなディストリビューションでも、最近は技術力が高く、インターフェースを大胆に変えているものや、Mintのようにさまざまな使いやすいオマケソフトをつけているものが増えています。Deepin最近は新しいデスクトップ環境がどんどん開発されています。Deepinなどをディストリビューションがサポートする動きも大きくなっています。30ではPantheonとDeepinに対応しました。これからLinuxデスクトップはとても面白くなっていくと思います。フレーバーやSpinとして対応していないデスクトップ環境やウィンドウマネージャでも、UbuntuやFedoraのパッケージから導入することができます。Linuxリモート操作リモートのXプログラムを実行するリモートのXプログラムを実行する方法。X11はネットワーク透過なクライアント・サーバーシステムであるため、SSHと同じようにリモートにあるGUIプログラムをローカルから通信して起動することができる。ローカルで動いているXアプリケーションと全く同じように操作することができる。client.myxhost.jpをXクライアント端末、server.myxhost.jpをXサーバー端末とする。DISPLAYserver.myxhost.jp:0.0あとは適当なアプリケーションを実行させるだけです。以上は以下のサイトを参考に執筆・引用しました。コロのLinuxサーバー構築また、「WindowsからLinux上のリモートのXアプリケーションを実行したい」といった場合は、Cygwin/Xが使える(ただし僕は使ったことがないので良く分からない)。Systemで、Windows上にUNIXのAPIを構築し、その上でXを動かす。VNCX11のネットワーク等価なクライアント・サーバーシステムで上記のようにリモートのXアプリケーションを実行できるが、「デスクトップそのものを遠隔操作したい」という場合はVNCというソフトウェアがある。オープンソースかつクロスプラットフォームで開発されており、OSを問わず遠隔操作が可能であるため、Windows向けにも使用できて便利である。LinuxからWindowsマシンを遠隔操作することもできる。VNCで使われるRFBプロトコルは簡素で、サーバはクライアントにピクセルデータを送るだけである。デフォルトではTCPの5900から5906までのポート番号を使用する(Webブラウザで動くJava版のクライアントは既定で5800から5806まで)。VNCは通信に暗号を用いないため、パスワードなどを含めて全てが平文で送信される。Telnetと同じく危険なためセキュリティには注意が必要。3.0の下で再許諾いたします。日本語入力を参照のこと。WaylandwaylandX11の代替を目指す、ディスプレイサーバ。X11がモジュール化し、機能をクライアントとウィンドウマネージャに明け渡すことにより、X11サーバーはほとんど何もせず、データ通信をしているだけになってしまった。そのため、X11の機能を単純化し、単純なディスプレイサーバとして、waylandと言うものが開発されている。僕の見たところでは、今までの「のっぺり・もっさりしたGUI」が速くなるのではないか、と言う期待をしている。25は、GNOMEではwaylandを標準のディスプレイサーバとして採用している。10でも標準になるとのこと。X11は死んで、Waylandの時代ではないかと思います。MriMriはUbuntuで独自に作られていたWaylandと似たような次世代のディスプレイサーバだったが、今ではUbuntuもWaylandを採用するなど衰退した。3ボタンマウスでコピー・ペースト伝統的なUNIXのX11では、Macの1ボタンやWindows/PCの2ボタンではなく、3ボタンマウスを使っていた。この3ボタンマウスは、現在のホイール用の中ボタンがあるマウスでは、エミュレートして使うことができる。X11では、伝統的に、選択して右クリックメニューからコピーを選択しなくても、文字列を選択しただけでコピーできる。中ボタンのクリックでペーストができる。今ではGNOMEやKDEでも右クリックメニューからコピー・ペーストを行うのが一般的である。X11でも使うのはターミナルX11でも、UNIXの基本はターミナルです。X11では、端末エミュレータというソフトウェアを使って、X11からコマンドシェルを用いてコマンドを実行することができます。アイコンで操作したい、という人は多いでしょう。GNOME/KDEには、ターミナル以外に「ファイルマネージャ」というソフトウェアが用意されています。これは起動時のGNOMEやKDEで既に起動しており、ユーザーはデスクトップのアイコンをクリックしたり、ファイルマネージャを新しく起動して深いディレクトリ階層を辿ったりすることができます。「WindowsもUNIXもどちらの形式の操作もできる両刀使い」です。GNOMEとUNIXコマンドラインを上手く使い分けることで、デスクトップLinuxの真価が発揮するでしょう。GUIのWebブラウザがあればLinuxでも何とかなるまた、インターネットも同じで、wgetのようなコマンドとMozillaのようなGUIのWebブラウザを使い分けます。現代のパソコンでは、クラウド化が進み、何でもローカルのアプリケーションよりもブラウザから見る場合が増えました。これはLinuxにとって朗報です。ChromeなどはWindowsと全く同じように操作することができるからです。僕はLinuxを使ってYouTubeを見ることの多いYouTube利用者です。最近はAndroidからもYouTubeの音楽を良く聴きますが、ネットワークやクラウドが行き着く先は、きっとWindowsよりもLinuxのはずです。Xサーバーをなぜサーバーと言うかXサーバーでは、ローカルのマシンをXサーバーと言い、ネットワーク上のマシンをXクライアントと言います。これは、マイクロカーネル的なOSの考え方に基づいています。マイクロカーネルOSでは、プロセスやメモリ管理やプロセス間通信などを除いて、ファイルシステムやネットワーク、デバイスドライバは、ファイルシステムサーバーのようなデーモンで行います。Xサーバーもこれと同じで、グラフィック専門のマイクロカーネルサーバーのようなものだと考えることができます。余談Linuxは単なる機械システムではなく、環境である2017-10-28より。Linuxは、機械システムであると同時に、環境でもある。今のLinuxのGUIは、全体が調和されて設計されておらず、非常に完成度が低い印象を与えてしまう。環境である以上、パクリをせず、全体の信頼性や分かりやすさを大切にしなければならない。3は方向性としては正しい。SVGとHTMLを拡張して異次元のテーマを2017-11-01より。僕は、LinuxのGUI環境は、SVGとHTMLの拡張のような言語を作って、どんなグラフィックスでもテーマで描画出来るような、そういう「異次元のテーマ」をサポートするのが良いと思う。AdobeのFlashと似ている。アイコンは今はpngのようになっているが、どんな風にリストするのか、のようなことまでSVG-HTMLでサポートする。いう風にすれば、きっとデザイナーもIllustratorのような雰囲気でLinuxのテーマを作ることが出来るだろう。XPの時に裏で実装していたスキン機能や、XULなどの技術を凌ぐものになってほしい。UIをXMLにすることで、全てのインターフェースをサポート出来るかもしれない。GTK+アプリのそれぞれの作り方と矛盾するものになってはいけない。ある意味、SVGでHTMLにするなら、バックエンドをPHPのようなものにして、そのインタプリタ・エンジンから作っても良い。ある意味、ブログに良くあるテーマ機能と同じものを作れば良い。GUIである以上、ページよりもインタラクティブなスキン・シェルにする必要がある。Linuxを使いやすいものにするためにLinuxを使いやすいものにするために必要なのは、僕が思うに以下のような方針を決めることだと思う。Illustratorのような考え抜かれたアプリケーションだ。僕は、昔から「自然」という発想によるインターフェースを良く考える。自然に機能が配置・準備され、自然な挙動を示し、それが自然にそうデザインされるべきである、といった「自然なGUI」というものを考える。そこでは、全てのことに根拠を求めて、どんなところにどんな機能があるのか、デザイナーのようにきちんと考える。ただの機械ではなく、操作環境なのだということを意識する。今のGNOMEは、リーナス・トーバルズが言っているように、「ユーザーを馬鹿だと見なしている」と思う。デスクトップ環境のことを何も知らない素人のことしか考えていない。本当は、Linuxはある程度慣れた人間しか使わないはずだ。一般的Linuxユーザーのことを考えていない。一般的Linuxユーザーに良いようにしたいなら、もっとUNIXとの親和性を高め、そして管理が簡単にコマンドと設定ファイルで出来るような、そういうものにしなければならないはずだ。ある意味、最近は自動設定するようになったのは良いが、もし手動設定に戻したい場合にどうすれば良いのか良く分からなかったりする。した、一般的なLinuxユーザー、もっと言えばパソコンオタクやIT上級者のために使いやすい機能環境を作らなければ、Linuxユーザーは減るばかりで増えることは無いだろう。GNOMEのインターフェースは簡単にし、分かりやすくするのは良いが、本当に大切な効率性や考えなければならないこと、手間の削減のようなことを見落としている。その方が初心者向けにすることよりも優先度は高いはずだ。新機能提案:GUIパイプ(コピー&ペーストとパイプの類似性)僕は、X11の新しい機能の提案として、GUIパイプを提案する。UNIXではパイプを使うことで、あるプログラムの出力を別のプログラムの入力に与えることが出来る。僕は、GUIでテキストをコピー&ペーストしたり、いったんファイルに保存して開いたりすることが、このパイプと類似していると思う。GUIでもパイプのようにテキストとコマンドを介して、処理を自動化出来ないかと思う。このためには、GUIのプログラムの機能をコマンドから呼び出せなければならない。illustrator.make_textbox('center').set_background('black').save_png('view.png')このようにすると、GUIのアプリケーションをコマンドで自動化し、UNIXの今までのコマンドプログラムとも連携出来る。オブジェクト指向のコードに似ている。GUIとコマンドラインの融和を見ているようだ。新しいデスクトップインターフェース僕は、新しいデスクトップ環境のインターフェースを考えた。画面の一番上に、今開いているアプリケーションの一覧をアイコンで表示する。7のタスクバーと同様。Dockのように動く。画面の上から二番目のバーに、アプリケーションのメニューバーを表示する。これは、Macでアプリケーションメニューを表示するのと同様。上のアプリケーション一覧をタブのようにして、アプリケーションのアイコンをクリックすることでメニューバーの表示を切り替える。その上で、その下の大きなスクリーン画面には、アプリケーションのウィンドウを表示する。最後に、画面の一番下に、今開いているアプリケーションのウィンドウ一覧を表示する。XPのタスクバーと同様。ウィンドウ一覧に表示されるのは、一番上のアプリケーションアイコン(アプリケーションタブ)で選択されたアプリケーションのみ。アプリケーションタブを画面左に表示したり(UbuntuのUnityと同様)、NeXTSTEPのようにウィンドウ一覧をDockのように表示することもできるようにする。要するに、こんな感じ。|+---------+------------------------+あるいは、アプリケーションアイコンからメインメニューを伸ばす感じにしてはどうだろうか。|+---------+------------------------+これは、ウィンドウ一覧もメニューにすることで、バーをひとつだけにでき、画面を巨大なバーが占領しなくても済むようにできる。|+----------------------------------+ライブラリLibTIFF画像処理ライブラリ。ファイル形式Tiffは画像データにさまざまなデータ属性を追加した画像形式として知られる。Wikipediaちょっと古めのコンピュータTcl/TkGUIを簡単に表示することの出来るスクリプト言語。WikipediaMotif/CDE昔のUNIXワークステーションで使われていたツールキットMotifとデスクトップ環境CDEについて。3.1MicrosoftによるDOS(ディスク・オペレーティング・システム)と、それを拡張する16bitのオペレーティング環境。この当時はまだDOSとWindowsが分離されていた。今のLinuxとX11に近い。OSアップルによる先駆的とされたOS。Xは昔のMacではなく、NeXTSTEPと言う技術を応用したUNIXの一つです。WikipediaBeOS昔先進的だったOSです。Wikipedia8bitパソコン/BASIC昔のホビー向けパソコン。BASICと言う簡単な言語のインタプリタを使って、プログラミングを誰でも楽しめる。僕の父親がこの世代のパソコンに詳しいです。父親は8bit以降の色んなコンピュータを集めていたことがあります。昔僕も好きだったテレビゲーム。最近はオンラインで行うネットゲームが流行っています。Wikipediaリンク集全般X11入門UNIXでGUI環境を実現するウィンドウシステム。ProjectX11プログラミングX11によるプログラミング。WikibooksWaylandX11に替わるディスプレイサーバのWaylandについて。