Linux あれこれ

Linux 関連の備忘録です。

Lubuntu 20.04 LTS (Beta) ログイン画面の設定ツール「C++ 版」を試しました〈H17〉

登録日: 2020-04-08 更新日: 2020-04-08

公開直前の「Lubuntu 20.04 LTS」の未公開版(ベータ版)をUSB メモリにインストールしました。

前回は、ログイン画面のテーマを手動で変更しましたが、GitHUB に「SDDM」の設定ツールがあったので、その「C++ 版」のインストールにトライしてみました。備忘録です。

-

「目次」

-


参考:

SDDM arch-wiki

SDDM (Simple Desktop Display Manager) は、 KDE 5 の Plasma デスクトップで推奨されているディスプレイマネージャで、QML によるテーマ機能をサポートしています。

公式リポジトリ(extra) にある「sddm-kcm」パッケージをインストールすると、Plasma のシステム設定から GUI で SDDM を設定できるようになるみたい(未確認)。

AUR リポジトリに、Qt ベースの設定エディタ (sddm-config-editor-git ) がありました。Arch Linux 系なら簡単にインストールできるので、恵まれていますね。

→今回は 「これをビルド」 してみます。

-


ダウンロード

1. ブラウザで lxqt/sddm-config-editor を開きます。

2. 緑色の「Clone or Download」をクリック →青い「Download ZIP」をクリック

3. ダウンロードされた「sddm-config-editor-master.zip」を任意のフォルダ「sdd-cnf」に移動して、展開。

4. インストールガイドを確認:

ruby」フォルダに[Ruby] バージョン、「cpp」フォルダに[C++] バージョンが入っています。それぞれのフォルダにREADME.md があります。

-


C++」の場合のファイル構成:
$ cd ~/ダウンロード/sdd-cnf/sddm-config-editor-master/cpp/

$ ls -1
README.md
configuration.cpp
configuration.h
controller.cpp
controller.h
data
deployment.pri
main.cpp
qml.qrc
sddm-config-editor.pro
sddm-config-editor_it.ts
sddm-config-editor_ru.ts
sddm-config-editor_zh_CN.ts
section.cpp
section.h
setting.cpp
setting.h
translations.qrc
ui
update-config.sh

→すでに3カ国で翻訳されています。

-


README.md を確認
$ cat README.md

# SDDM Configuration Editor - C++ バージョン
:

-


依存関係

-


ビルドのやり方
$ qmake
$ make
  • qmake にオプションで、PREFIX=<path> にてインストール先を設定できます。

  • インストールするには、「make install」を使用します。

  • Arch Linux では、インストールスクリプトが提供されています。

in AUR

-


依存関係のインストール:

  • polkit は入っているみたい?

  • QtCreator が必要みたい。

-


polkit 関連のインストール

polkit

polkit は、承認を定義および処理するためのツールキットです。 非特権プロセスが特権プロセスと話すことを許可するために使用されます。

-


1. 「圧縮されたtarball」を入手:

最新リリース

-


2. 圧縮されたtarballの信頼性を確認:
$ gpg --verify polkit-$(VERSION).tar.gz.sign polkit-$(VERSION).tar.gz

gpg: Signature made Tue 23 Apr 2019 04:19:29 PM CEST using RSA key ID FFDCE258
gpg: Good signature from "Jan Rybar (Red Hat) <jrybar@redhat.com>"

-


3. 公開鍵を入手:

公開鍵

-


4. 設定

-


apt で入っているかを確認
$ apt search polkit | grep インストール済み
:
gir1.2-polkit-1.0/focal,now 0.105-26ubuntu1 amd64 [インストール済み、自動]
libpolkit-agent-1-0/focal,now 0.105-26ubuntu1 amd64 [インストール済み、自動]
libpolkit-gobject-1-0/focal,now 0.105-26ubuntu1 amd64 [インストール済み、自動]
libpolkit-qt5-1-1/focal,now 0.113.0-0ubuntu2 amd64 [インストール済み、自動]
lxqt-openssh-askpass/focal,now 0.14.1-1ubuntu1 amd64 [インストール済み、自動]
muon/focal,now 4:5.8.0-1ubuntu5 amd64 [インストール済み、自動]
polkit-kde-agent-1/focal,now 4:5.18.4.1-0ubuntu1 amd64 [インストール済み、自動]

→polkit は入っているみたい?これだけでいいのかは不明。

-


Qt5 関連のインストール

インストール 1:

$ sudo apt update

$ sudo apt install build-essential
:
以下のパッケージが新たにインストールされます:
  binutils binutils-common binutils-x86-64-linux-gnu build-essential dpkg-dev fakeroot g++ g++-9 gcc   
  gcc-9 libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl libasan5 libatomic1   
  libbinutils libc-dev-bin libc6-dev libcc1-0 libcrypt-dev libctf-nobfd0 libctf0 libfakeroot           
  libgcc-9-dev libitm1 liblsan0 libquadmath0 libstdc++-9-dev libtsan0 libubsan1 linux-libc-dev make    
  manpages-dev
:
update-alternatives: /usr/bin/c++ (c++) を提供するために自動モードで /usr/bin/g++ を使います

→「g++」と「make」が入りました。

-


確認:
$ make --version
GNU Make 4.2.1

$ whereis make
make: /usr/bin/make /usr/share/man/man1/make.1.gz

-

$ c++ --version
c++ (Ubuntu 9.3.0-8ubuntu1) 9.3.0

$ whereis c++
c++: /usr/bin/c++ /usr/include/c++ /usr/share/man/man1/c++.1.gz

-

$ g++ --version
g++ (Ubuntu 9.3.0-8ubuntu1) 9.3.0

$ whereis g++
g++: /usr/bin/g++ /usr/share/man/man1/g++.1.gz

-


インストール 2:

$ sudo apt install qttools5-dev-tools
:
提案パッケージ:
  qt5-doc
以下のパッケージが新たにインストールされます:
  libclang1-10 libllvm10 libqt5designercomponents5 qdoc-qt5 qhelpgenerator-qt5 qt5-assistant
  qtattributionsscanner-qt5 qtchooser qttools5-dev-tools

メニュー →「プログラミング」にて、 「Qt5 アシスタント」、「Qt5 デザイナ」、「Qt5 リンギスト」が入りました。

-


インストール 3:

$ sudo apt install qt5-default
:
以下のパッケージが新たにインストールされます:
  libegl-dev libgl-dev libglu1-mesa-dev libglx-dev libpthread-stubs0-dev libqt5opengl5-dev
  libvulkan-dev libx11-dev libxau-dev libxcb1-dev libxdmcp-dev libxext-dev qt5-default qt5-qmake
  qt5-qmake-bin qtbase5-dev qtbase5-dev-tools x11proto-core-dev x11proto-dev x11proto-xext-dev
  xorg-sgml-doctools xtrans-dev

→「qt5-default、qt5-qmake、qt5-qmake-bin、qtbase5-dev、qtbase5-dev-tools、libglu1-mesa-dev」が入りました。

-


確認:
$ qmake --version
QMake version 3.1
Using Qt version 5.12.5 in /usr/lib/x86_64-linux-gnu

$ whereis qmake
qmake: /usr/bin/qmake

-


インストール 4:

OpenGL のライブラリのインストール:

$ sudo apt install mesa-common-dev
:
以下のパッケージが新たにインストールされます:
  libdrm-dev mesa-common-dev

-


インストール 5:

「QtCreator」が必要みたい。QtCreator は、Qt プログラミング用のIDEです。

$ sudo apt install qtcreator
:
以下のパッケージが新たにインストールされます:
  binfmt-support clang clang-10 clang-tidy clang-tidy-10 clang-tools-10 gdb gdbserver lib32gcc-s1
  lib32gcc1 lib32stdc++6 libbabeltrace1 libc6-dbg libc6-i386 libclang-common-10-dev libclang-cpp10
  libclang1-8 libdw1 libffi-dev libkf5syntaxhighlighting-data libkf5syntaxhighlighting5 libllvm8
  libncurses-dev libobjc-9-dev libomp-10-dev libomp5-10 libpfm4 libqbscore1.13 libqt5quicktest5
  libqt5serialport5 libqt5xmlpatterns5 libtinfo-dev libz3-4 libz3-dev llvm-10 llvm-10-dev
  llvm-10-runtime llvm-10-tools python3-pygments qbs-common qmlscene qt3d5-doc qt5-doc
  qt5-qmltooling-plugins qtbase5-doc qtcharts5-doc qtconnectivity5-doc qtcreator qtcreator-data
  qtcreator-doc qtdatavisualization5-doc qtdeclarative5-dev-tools qtdeclarative5-doc
  qtgraphicaleffects5-doc qtlocation5-doc qtmultimedia5-doc qtnetworkauth5-doc qtquickcontrols2-5-doc
  qtquickcontrols5-doc qtscript5-doc qtscxml5-doc qtsensors5-doc qtserialbus5-doc qtserialport5-doc
  qtsvg5-doc qttools5-doc qtvirtualkeyboard5-doc qtwayland5-doc qtwebchannel5-doc qtwebengine5-doc
  qtwebsockets5-doc qtwebview5-doc qtx11extras5-doc qtxmlpatterns5-dev-tools qtxmlpatterns5-doc

メニュー →「プログラミング」→「Qt5 Creator」が入りました。

-


インストール 6:

フォントライブラリをインストールしてなかったので確認。

$ apt list libfontconfig1
:
libfontconfig1/focal,now 2.13.1-2ubuntu2 amd64 [インストール済み、自動]

→何かを入れたときに自動で入ったみたい。インストール不要。

-


ビルド

依存関係に不備があり、エラーするだろうから、インストール先を指定してビルドしてみます。

→追記: そこまで行けなかったので結局は不要でした。

前準備:
$ cd ~/ダウンロード/sdd-cnf/
$ mkdir build

$ ls
build  sddm-config-editor-master  sddm-config-editor-master.zip

qmake 1回目:

$ cd ~/ダウンロード/sdd-cnf/sddm-config-editor-master/cpp/
$ qmake PREFIX=/home/ubn/ダウンロード/sdd-cnf/build
:
Info: creating stash file /home/ubn/ダウンロード/sdd-cnf/sddm-config-editor-master/cpp/.qmake.stash
WARNING: Project ERROR: Unknown module(s) in QT: qml quick
Updating '/home/ubn/ダウンロード/sdd-cnf/sddm-config-editor-master/cpp/sddm-config-editor_zh_CN.qm'...
     15 件のメッセージを翻訳しました(完了 15 件、未完了 0 件)
     29 件の未翻訳のソーステキストを無視しました
Updating '/home/ubn/ダウンロード/sdd-cnf/sddm-config-editor-master/cpp/sddm-config-editor_ru.qm'...
     54 件のメッセージを翻訳しました(完了 54 件、未完了 0 件)
Updating '/home/ubn/ダウンロード/sdd-cnf/sddm-config-editor-master/cpp/sddm-config-editor_it.qm'...
     50 件のメッセージを翻訳しました(完了 50 件、未完了 0 件)
Project ERROR: Unknown module(s) in QT: qml quick

→エラーで停止:

WARNING: Project ERROR: Unknown module(s) in QT: qml quick

-


対策:

「qtdeclarative5-dev」パッケージがないのでインストール:

$ sudo apt install qtdeclarative5-dev
:
以下のパッケージが新たにインストールされます:
  libqt5quickparticles5 libqt5quickshapes5 qtdeclarative5-dev

-


qmake 2回目:

$ cd ~/ダウンロード/sdd-cnf/sddm-config-editor-master/cpp/
$ qmake PREFIX=/home/ubn/ダウンロード/sdd-cnf/build
:
Updating '/home/ubn/ダウンロード/sdd-cnf/sddm-config-editor-master/cpp/sddm-config-editor_zh_CN.qm'...
     15 件のメッセージを翻訳しました(完了 15 件、未完了 0 件)
     29 件の未翻訳のソーステキストを無視しました
Updating '/home/ubn/ダウンロード/sdd-cnf/sddm-config-editor-master/cpp/sddm-config-editor_ru.qm'...
     54 件のメッセージを翻訳しました(完了 54 件、未完了 0 件)
Updating '/home/ubn/ダウンロード/sdd-cnf/sddm-config-editor-master/cpp/sddm-config-editor_it.qm'...
     50 件のメッセージを翻訳しました(完了 50 件、未完了 0 件)

→正常終了しました。

-


確認:
$ ls
Makefile           data                      sddm-config-editor_it.ts     section.h
README.md          deployment.pri            sddm-config-editor_ru.qm     setting.cpp
configuration.cpp  main.cpp                  sddm-config-editor_ru.ts     setting.h
configuration.h    qml.qrc                   sddm-config-editor_zh_CN.qm  translations.qrc
controller.cpp     sddm-config-editor.pro    sddm-config-editor_zh_CN.ts  ui
controller.h       sddm-config-editor_it.qm  section.cpp                  update-config.sh

→作業しているフォルダに、Makefile が作られました。.ts が翻訳されて、.qm が作られています。

-

make

$ make

g++ -c -pipe -g -Wall -W -D_REENTRANT -fPIC -DQT_QUICK_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I. -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem /usr/include/x86_64-linux-gnu/qt5/QtQuick -isystem /usr/include/x86_64-linux-gnu/qt5/QtWidgets -isystem /usr/include/x86_64-linux-gnu/qt5/QtGui -isystem /usr/include/x86_64-linux-gnu/qt5/QtQml -isystem /usr/include/x86_64-linux-gnu/qt5/QtNetwork -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore -I. -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -o main.o main.cpp

g++ -c -pipe -g -Wall -W -D_REENTRANT -fPIC -DQT_QUICK_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I. -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem /usr/include/x86_64-linux-gnu/qt5/QtQuick -isystem /usr/include/x86_64-linux-gnu/qt5/QtWidgets -isystem /usr/include/x86_64-linux-gnu/qt5/QtGui -isystem /usr/include/x86_64-linux-gnu/qt5/QtQml -isystem /usr/include/x86_64-linux-gnu/qt5/QtNetwork -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore -I. -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -o controller.o controller.cpp

g++ -c -pipe -g -Wall -W -D_REENTRANT -fPIC -DQT_QUICK_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I. -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem /usr/include/x86_64-linux-gnu/qt5/QtQuick -isystem /usr/include/x86_64-linux-gnu/qt5/QtWidgets -isystem /usr/include/x86_64-linux-gnu/qt5/QtGui -isystem /usr/include/x86_64-linux-gnu/qt5/QtQml -isystem /usr/include/x86_64-linux-gnu/qt5/QtNetwork -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore -I. -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -o configuration.o configuration.cpp

g++ -c -pipe -g -Wall -W -D_REENTRANT -fPIC -DQT_QUICK_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I. -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem /usr/include/x86_64-linux-gnu/qt5/QtQuick -isystem /usr/include/x86_64-linux-gnu/qt5/QtWidgets -isystem /usr/include/x86_64-linux-gnu/qt5/QtGui -isystem /usr/include/x86_64-linux-gnu/qt5/QtQml -isystem /usr/include/x86_64-linux-gnu/qt5/QtNetwork -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore -I. -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -o section.o section.cpp

g++ -c -pipe -g -Wall -W -D_REENTRANT -fPIC -DQT_QUICK_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I. -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem /usr/include/x86_64-linux-gnu/qt5/QtQuick -isystem /usr/include/x86_64-linux-gnu/qt5/QtWidgets -isystem /usr/include/x86_64-linux-gnu/qt5/QtGui -isystem /usr/include/x86_64-linux-gnu/qt5/QtQml -isystem /usr/include/x86_64-linux-gnu/qt5/QtNetwork -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore -I. -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -o setting.o setting.cpp

make: *** 'qrc_qml.cpp' に必要なターゲット 'data/config-schema.json' を make するルールがありません.  中止.

→途中でエラー。Makefile に不備があるみたい。

-


Makefile を確認
$ featherpad ~/ダウンロード/sdd-cnf/sddm-config-editor-master/cpp/Makefile

53 行目以降: 59 行目に注目

####### Files

SOURCES       = main.cpp \
        controller.cpp \
        configuration.cpp \
        section.cpp \
        setting.cpp qrc_qml.cpp \ ←(この行に注目)
        qrc_translations.cpp \
        moc_controller.cpp \
        moc_configuration.cpp \
        moc_section.cpp \
        moc_setting.cpp
OBJECTS       = main.o \
        controller.o \
        configuration.o \
        section.o \
        setting.o \
        qrc_qml.o \ ←(ここに注目)
        qrc_translations.o \ ←(ここに注目)
        moc_controller.o \
        moc_configuration.o \
        moc_section.o \
        moc_setting.o
:
: 401 行目:
:
compiler_rcc_make_all: qrc_qml.cpp qrc_translations.cpp ←(ここに注目)
compiler_rcc_clean:
    -$(DEL_FILE) qrc_qml.cpp qrc_translations.cpp
qrc_qml.cpp: qml.qrc \ ←(ここに注目)
        /usr/lib/qt5/bin/rcc \
        data/config-schema.json \ ←(ここに注目)
        ui/path_list-editor.qml \
        ui/theme-editor.qml \
        ui/session-editor.qml \
        ui/boolean-editor.qml \
        ui/enum-editor.qml \
        ui/file-editor.qml \
        ui/directory-editor.qml \
        ui/setting-section.qml \
        ui/string-editor.qml \
        ui/main-window.qml \
        ui/integer-editor.qml \
        ui/numlock-editor.qml
    /usr/lib/qt5/bin/rcc -name qml qml.qrc -o qrc_qml.cpp

qrc_translations.cpp: translations.qrc \ ←(ここに注目)
        /usr/lib/qt5/bin/rcc \
        sddm-config-editor_it.qm \
        sddm-config-editor_zh_CN.qm \
        sddm-config-editor_ru.qm
    /usr/lib/qt5/bin/rcc -name translations translations.qrc -o qrc_translations.cpp

compiler_moc_predefs_make_all: moc_predefs.h
compiler_moc_predefs_clean:
    -$(DEL_FILE) moc_predefs.h
:

-


うまく行けば、
  • rcc で、qml.qrc →qrc_qml.cpp (C++ ソース)と変換され、 その後、C++ でqrc_qml.cpp →qrc_qml.o にコンパイル

  • rcc で、translations.qrc →qrc_translations.cpp (C++ ソース)に変換され、 その後、C++ でqrc_translations.cpp →qrc_translations.o にコンパイル

される流れみたいですが、その最初でエラー。

-


~/ダウンロード/sdd-cnf/sddm-config-editor-master/cpp/data の内容:
../data

→これで「data/」のパス合わせ。

-


~/ダウンロード/sdd-cnf/sddm-config-editor-master/cpp/ui の内容:
../ui

→これで「ui/」のパス合わせ。

-


make のやり直しのとき:

$ make clean

rm -f sddm-config-editor_zh_CN.qm sddm-config-editor_ru.qm sddm-config-editor_it.qm
rm -f qrc_qml.cpp qrc_translations.cpp
rm -f moc_predefs.h
rm -f moc_controller.cpp moc_configuration.cpp moc_section.cpp moc_setting.cpp
rm -f main.o controller.o configuration.o section.o setting.o qrc_qml.o qrc_translations.o moc_controller.o moc_configuration.o moc_section.o moc_setting.o
rm -f *~ core *.core

-


qmake のやり直しのとき:

Makefile が削除されます。

$ make distclean

rm -f sddm-config-editor_zh_CN.qm sddm-config-editor_ru.qm sddm-config-editor_it.qm
rm -f qrc_qml.cpp qrc_translations.cpp
rm -f moc_predefs.h
rm -f moc_controller.cpp moc_configuration.cpp moc_section.cpp moc_setting.cpp
rm -f main.o controller.o configuration.o section.o setting.o qrc_qml.o qrc_translations.o moc_controller.o moc_configuration.o moc_section.o moc_setting.o
rm -f *~ core *.core
rm -f sddm-config-editor 
rm -f .qmake.stash
rm -f Makefile

-


いろいろいじってみたけど、ダメでした。

そのたびに、ファイル名が変わり、「make するルールがありません」というおなじみのエラー。

-


参考: 同じQt5 アプリのfeatherpad のコンパイルに必要で、入っていないものをインストール:

関係ないだろうな〜と思いつつ、

$ sudo apt install libqt5x11extras5-dev libqt5svg5-dev libhunspell-dev
:
以下のパッケージが新たにインストールされます:
  libhunspell-dev libqt5svg5-dev libqt5x11extras5-dev

→同じエラー。

-


あとは、最新の Qt とpolkit をサイトからダウンロードして入れるしかなさそう。

これなら依存関係の漏れは防げるかも。

-


まとめ

Arch Linux だとAUR (開発者が依存関連をスクリプトで書くのでビルドの成功率が高いというシステム)があるので簡単にビルドできますが、Ubuntu だと依存関係、その他を自己解決しないといけないのでたいへん。

今のところ、Makefile でハマって保留中です。成功するまで待っていたら投稿できません。 ./configure の代わりに、CMake が使われているのはわかったけど、スキルがないので「学ぶ」のが先でしょうね。

-

-


目次

先頭

-


-