SDDM

提供: ArchWiki
2022年3月29日 (火) 20:32時点におけるAshMyzk (トーク | 投稿記録)による版 (→‎HiDPI の有効化: Wayland用の記述を追加)
ナビゲーションに移動 検索に移動

関連記事

Simple Desktop Display Manager (SDDM) は KDE 5 の Plasma デスクトップで推奨されているディスプレイマネージャです。

Wikipedia より:

Simple Desktop Display Manager (SDDM) は X11 と Wayland ウィンドウシステム向けのディスプレイマネージャ (グラフィカルログインプログラム) である。SDDM は C++11 によってスクラッチで書かれており QML によるテーマ機能をサポートしている。KDE ディスプレイマネージャの後継で KDE Frameworks 5, KDE Plasma 5, KDE Applications 5 と合わせて使われる。
ノート: Wayland のサポートは完全ではありません [1]。Wayland のセッションは認識されますが、SDDM 自体は X11 で動作します。SDDM 0.20 では完全な Wayland サポートが導入されます。[2]

インストール

sddm パッケージをインストールしてください。任意で KConfig Module(KDE 設定モジュール) 用の sddm-kcm もインストールしてください。

そしてディスプレイマネージャ#ディスプレイマネージャをロードするにしたがってブート時に SDDM を起動させます。

設定

SDDM のデフォルト設定ファイルは /usr/lib/sddm/sddm.conf.d/default.conf に存在します。設定を変更するときは /etc/sddm.conf.d/ に設定ファイルを作成してください。利用可能なオプションは sddm.conf(5) を見て下さい。

(plasma グループに含まれている) sddm-kcm パッケージをインストールすることで Plasma のシステム設定から GUI で SDDM を設定できます。Qt ベースの設定エディタ (sddm-config-editor-gitAUR) も存在します。

systemd によって制御されている環境では、SDDM がデフォルトで systemd-logind を使ってセッションを管理するため、何も設定しなくても問題なく動作します。そのため、パッケージをインストールした時に設定ファイルは作成されません。SDDM にはデフォルト設定のサンプル設定ファイルを生成するコマンドがあるので、必要であれば使って下さい:

# sddm --example-config > /etc/sddm.conf.d/sddm.conf

自動ログイン

KDM と同じように、SDDM は設定ファイルによって自動ログインをサポートしています、例:

/etc/sddm.conf.d/autologin.conf
[Autologin]
User=john
Session=plasma

上の設定だと、システムが起動した時に john ユーザーで KDE Plasma セッションが起動します。利用できるセッションのタイプは ls /usr/share/xsessions/ でわかります。

警告: 設定を誤ると、あなたのノートパソコンへの物理的なアクセスを手に入れた攻撃者が自動ログインを使って、たやすくデスクトップを破壊してしまう可能性があります。自動ログインは他の認証プロンプトによってシステムが保護されているときにだけ有効にしてください。例: パスフレーズによる root ファイルシステムの暗号化

KDE Plasma の自動ログインを使用した場合、セッションのロックは利用できなくなります [3]

以下のスクリプトを追加することで KDE のスクリーンセーバーを自動的に有効化することが可能です:

#!/bin/bash
/usr/bin/qdbus-qt4 org.kde.screensaver /ScreenSaver SetActive true &
exit 0

ログイン時に KDE Wallet のロックを解除

KDE Wallet#ログイン時に KDE ウォレットを自動的にアンロックを見てください。

テーマ設定

テーマの設定は [Theme] セクションで変更できます。

デフォルトの Plasma テーマを使いたい場合 breeze に設定してください。

archlinux-themes-sddmAUR など、AUR から入手できるテーマもあります。

メインテーマ

メインテーマは Current で設定します。例: Current=archlinux-simplyblack

テーマの編集

SDDM のデフォルトのテーマディレクトリは /usr/share/sddm/themes/ です。作成したカスタムテーマはこのディレクトリのサブディレクトリに追加することができます。サブディレクトリの名前はテーマの名前と合わせる必要があります。インストールされているファイルを参考に自分自身のテーマを作成してみてください。

テーマのテスト (プレビュー)

必要であれば SDDM のテーマをプレビューすることができます。以下のようにコマンドを実行してください:

$ sddm-greeter --theme /usr/share/sddm/themes/breeze

新しいウィンドウが開いてテーマのプレビューが表示されます。

ノート: プレビューモードでは、シャットダウンやサスペンド、ログインなどは出来ません。

マウスカーソル

マウスカーソルのテーマを設定したい場合は、CursorTheme を使用したいカーソルテーマに設定してください。

Plasma で使用できるマウスカーソルのテーマの名前は: breeze_cursors, Breeze_Snow, breeze-dark

アバターの変更

username.face.icon という名前の png 画像をデフォルトディレクトリ /usr/share/sddm/faces/ に配置してください。もしくはデフォルトディレクトリを別のディレクトリに変更することもできます。例:

/etc/sddm.conf.d/avatar.conf
[Theme]
FacesDir=/var/lib/AccountsService/icons/

ホームディレクトリのルートに .face.icon という名前の PNG 画像を置く方法もあります。ただし、sddm ユーザーからファイルが読み込めるようにする必要があります。

ノート: アバター画像がシンボリックリンクの場合、リンク先のファイルに適切なファイル権限を設定してください。#ユーザーアイコンが表示されないを参照。

Numlock

Numlock を強制的に有効にしたい場合、[General] セクションに Numlock=on と設定してください。

ディスプレイの回転

Xrandr#設定を見てください。

DPI の設定

ディスプレイマネージャからディスプレイの PPI 設定を適切に設定できると便利です。設定ファイルで "ServerArguments" パラメータの末尾に -dpi your_dpi を追加してください。例:

/etc/sddm.conf.d/dpi.conf
[X11]
ServerArguments=-nolisten tcp -dpi 94

HiDPI の有効化

以下のファイルを作成してください:

/etc/sddm.conf.d/hidpi.conf
[Wayland]
EnableHiDPI=true

[X11]
EnableHiDPI=true

仮想キーボードを有効化する

qt5-virtualkeyboard をインストールしてください。

以下のファイルを作成してください:

/etc/sddm.conf.d/virtualkbd.conf
[General]
InputMethod=qtvirtualkeyboard

これで、SDDM は仮想キーボードを開くボタンをログインスクリーンの左下の角に表示するようになります。

指紋認証の利用

ノート: 作業前に指紋登録がなされていることを確認してください。指紋リーダーへの対応は不完全であり、この方法ではパスワードのみでのログインは不可能なようです。

SDDM では fprint を利用した指紋認証が可能です。fprint をインストールし指紋署名を登録したのち、 /etc/pam.d/sddm の先頭に auth sufficient pam_fprintd.so を加えてください。

ヒント: KDE のロックスクリーンで動作させるには、この行を /etc/pam.d_kde の先頭に加えてください。

また、ロックスクリーンではパスワード認証と指紋認証のいずれか片方を使うこともできます。auth セクションの先頭に以下を加えてください:

/etc/pam.d/kde/
auth 			sufficient  	pam_unix.so try_first_pass likeauth nullok
auth 			sufficient  	pam_fprintd.so
SDDM (/etc/pam.d/sddm) でも動作しますが、ログイン後に別途 KWallet のロックを解除する必要があります。

パスワード欄を空にして Enter キーを押すと、指紋認証が開始されます。

Wayland で動かす

SDDM は Wayland で rootless に動かすことができます。ただし、今のところ sddm-gitAUR パッケージを使っているときのみです。

新しい設定ファイルを /etc/sddm.conf.d/ ディレクトリに作成し、名前は /etc/sddm.conf.d/10-wayland.conf のようにしてください。

そして、その新しいファイルに以下の内容を追加します:

/etc/sddm.conf.d/10-wayland.conf
[General]
DisplayServer=wayland
GreeterEnvironment=QT_WAYLAND_SHELL_INTEGRATION=layer-shell

[Wayland]
CompositorCommand=

次に、SDDM を表示するための Wayland のコンポジター(例えば、KDE の KWin コンポジター)が必要です。CompositorCommand へのパラメータとしてコンポジターのプログラムや関連する引数を入力します。

KDE / KWin

警告: SDDM は KWin によって別のウインドウとして扱われるので、ログインすることによりそのウインドウを閉じることになります。ゆえに、ログアウトユーザの切り替えは望ましくない動作を引き起こします。
ヒント: KDE Wayland のディスプレイの設定(e.g. モニターレイアウト, 解像度, etc)に対する如何なる変更も SDDM に対しては適用されません。設定を適用させるには、KDE の System Settings を開き、Startup and Shutdown> Login Screen (SDDM) へ行き、"Apply Plasma Settings..." をクリックしてください。この操作を行うためには許可が必要です。

以下の内容を CompositorCommand へのパラメータとして、先に作成した SDDM の設定ファイル(e.g /etc/sddm.conf.d/10-wayland.conf) に追加してください:

/etc/sddm.conf.d/10-wayland.conf
[Wayland]
CompositorCommand=kwin_wayland --no-lockscreen

仮想キーボードのサポートを有効化するためには(例えば、qt5-virtualkeyboardmaliit-keyboard を使う場合)、以下のように --inputmethod フラグに適切なキーボードを指定して、kwin_wayland コマンドに追加してください(必要に応じて、maliit-keyboardqtvirtualkeyboard に置き換えてください):

/etc/sddm.conf.d/10-wayland.conf
[Wayland]
CompositorCommand=kwin_wayland --no-lockscreen --inputmethod maliit-keyboard

トラブルシューティング

greeterが表示されず、カーソルのみの黒画面

利用可能なディスクの空き領域が存在しない場合、greeter はクラッシュします。df -h でディスクの空き領域を確認してください。

ディスクの空き領域の問題でないとしたら、バグのせいかもしれません。他の TTY に切り替えてloginctl unlock-session session_id を実行するか、SDDM を再起動してみてください。

SDDM が greeter を表示するのに時間がかかる

エントロピープールが小さいと SDDM のロードに長い時間がかかる可能性があります(バグレポート)。乱数生成にエントロピープールを大きくする方法があります。

ログイン後にフリーズする

~/.Xauthority を削除してみてください。

SDDM が tty7 ではなく tty1 で起動する

SDDM は systemd の慣習 にしたがって tty1 に一番目のグラフィカルセッションを起動します。tty1 から tty6 まではテキストコンソール用にするという、昔のやり方が良い場合は、設定ファイルで [X11] セクションの MinimumVT 変数を変更してください:

/etc/sddm.conf.d/tty.conf
[X11]
MinimumVT=7

ユーザーが greeter に表示されない

警告: UID が高すぎたり低すぎるユーザーは基本的にディスプレイマネージャから認識されないようになっています [4]

SDDM はデフォルトで UID が 1000 から 60000 の間のユーザーしか表示しません (ちなみに、この値はコンパイル時に /etc/login.defs を参照して決まります)。使用したいユーザーの UID がこの値を下回っていたり上回っている場合、範囲を修正する必要があります。

例えば、UID が 501 の場合、設定ファイルで以下のように変更して最小の UID を下げて、またシステムユーザが使用するシェルを隠してください:

/etc/sddm.conf.d/uid.conf
[Users]
HideShells=/usr/bin/nologin,/sbin/nologin,/bin/false,/usr/bin/git-shell
MinimumUid=500

systemd-homed で使われるような高い UID の場合は、最大の UID を上げてください:

/etc/sddm.conf.d/uid.conf
[Users]
MaximumUid=60513

SDDM が US キーボードのレイアウトしかロードしない

SDDM は /etc/X11/xorg.conf.d/00-keyboard.conf で指定されたキーボードレイアウトをロードします。localectl set-x11-keymap コマンドを使うことでこの設定ファイルを生成することが可能です。詳しくは Xorg でのキーボード設定を見て下さい。

最初キーボードレイアウトが US に表示され、パスワードを入力し始めるとすぐに適当なレイアウトに切り替わる場合もあります [5]。これは SDDM のバグではなく libxcb (バージョン 1.13-1) が原因です [6]

ユーザーアイコンが表示されない

SDDM はユーザーアイコンを ~/.face.icon から読み込みます。

SDDM ユーザーからファイルが読み込めるように権限を設定してください:

$ setfacl -m u:sddm:x ~/
$ setfacl -m u:sddm:r ~/.face.icon

詳しくは SDDM README: No User Icon を参照。

画面解像度が低すぎる

EDID の情報が壊れているディスプレイで HiDPI を使用した場合に発生する問題です [7]

HiDPI を有効化している場合、HiDPI を無効にしてみてください。

無効にしても問題が解決しない場合、Xorg の設定ファイルでスクリーンのサイズを設定してください:

/etc/X11/xorg.conf.d/90-monitor.conf
Section "Monitor"
        Identifier      "<default monitor>"
        DisplaySize     345 194 # in millimeters
EndSection

ホームディレクトリが autofs の場合にロード時間が長い

SDDM はデフォルトでユーザーのアバターとして ~/.face.icon ファイルを使います。ホームディレクトリが autofs の場合 (例えば dm-crypt を使っている場合)、autofs がディレクトリをマウントできないと報告するまで SDDM は60秒間待機します。

/etc/sddm.conf を編集することでアバターを無効化することができます:

/etc/sddm.conf
[Theme]
EnableAvatars=false

X authority (aka MIT-MAGIC-COOKIE) file

[8]で詳細が言及されているように、SDDM は 認証ファイルのためにランダムな新しい UUID を使います。そのため、そのファイルを見つけるためにはスクリプトを使うことができます:

# find /var/run/sddm/ -type f

ログイン中のユーザーがいない時に x11vnc を開始する必要がある場合、このスクリプトが必要です。例えば:

# x11vnc -display :0 -auth "$( find /var/run/sddm/ -type f )"

複数スクリーンの設定で greeter が重複する

複数スクリーンの設定で X モニターのレイアウトが正しく設定されずに greeter が重複することがあります。この問題を解決するためには、以下のスクリプトを追加して、sddm greeter のレイアウトを左から右に並べてください:

/usr/share/sddm/scripts/Xsetup
for next in $(xrandr --listmonitors | grep -E " *[0-9]+:.*" | cut -d" " -f6); do
  [ -z "$current" ] && current=$next && continue
  xrandr --output $current --auto --output $next --auto --right-of $current
  current=$next
done