SDDM
関連記事
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 と合わせて使われる。
目次
- 1 インストール
- 2 設定
- 3 トラブルシューティング
- 3.1 greeterが表示されず、カーソルのみの黒画面
- 3.2 SDDM が greeter を表示するのに時間がかかる
- 3.3 ログイン後にフリーズする
- 3.4 SDDM が tty7 ではなく tty1 で起動する
- 3.5 ユーザーが greeter に表示されない
- 3.6 SDDM が US キーボードのレイアウトしかロードしない
- 3.7 ユーザーアイコンが表示されない
- 3.8 画面解像度が低すぎる
- 3.9 ホームディレクトリが autofs の場合にロード時間が長い
- 3.10 X authority (aka MIT-MAGIC-COOKIE) file
- 3.11 Overlapping greeters on multiscreen setup
インストール
そしてディスプレイマネージャ#ディスプレイマネージャをロードするにしたがってブート時に 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.desktop
上の設定だと、システムが起動した時に john
ユーザーで KDE Plasma セッションが起動します。利用できるセッションのタイプは ls /usr/share/xsessions/
でわかります。
KDE Plasma の自動ログインを使用した場合、セッションのロックは利用できなくなります [2]。
以下のスクリプトを追加することで 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
[General] EnableHiDPI=true
指紋認証の利用
SDDM では fprint を利用した指紋認証が可能です。fprint をインストールし指紋署名を登録したのち、
/etc/pam.d/sddm
の先頭に auth sufficient pam_fprintd.so
を加えてください。
パスワード欄を空にして Enter
キーを押すと、指紋認証が開始されます。
トラブルシューティング
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 に表示されない
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
SDDM uses a random fresh UUID for the auth file as described in details at [8]. So in order to find that file one may use a script:
# find /var/run/sddm/ -type f
This may be needed if one needs to start x11vnc when there is no user logged in. For example:
# x11vnc -display :0 -auth "$( find /var/run/sddm/ -type f )"
Overlapping greeters on multiscreen setup
It happens that the X monitor layout is not setup correctly on multiscreen setup leading to overlapping greeters. To solve this add the following lines to order your sddm greeter layout from left to right:
/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