在 Unity 16.04 中运行登录脚本

在 Unity 16.04 中运行登录脚本

我有一台连接到 LDAP(FreeIPA)的 Ubuntu 16.04 客户端计算机。它从 IPA LDAP 获取用户。因此,我们在/etc/pam.d/common-session文件中有一个 mkhomedir 指令,可自动创建主目录。

session required        pam_mkhomedir.so      skel=/etc/skel/      umask=0022

我为 Unity Desktop 的每个登录桌面的用户编写了一个小型自定义脚本。现在,我们希望每次用户/新用户登录时都运行此脚本。因为我们希望所有用户都能看到标准桌面。

我的配置如下:

要运行的登录脚本:

$ cat /usr/bin/login.sh

#!/bin/bash
dconf reset -f /
xdg-settings set default-web-browser google-chrome.desktop
gsettings set org.gnome.desktop.session idle-delay 0
gsettings set org.gnome.desktop.screensaver lock-enabled false
gsettings set com.canonical.Unity.Launcher launcher-position Bottom
dconf write /org/compiz/profiles/unity/plugins/unityshell/icon-size 24

我已更改的 LightDM 配置:

$ cat /usr/share/lightdm/lightdm.conf.d/50-unity-greeter.conf

[Seat:*]
greeter-session=unity-greeter
greeter-show-manual-login=true
greeter-setup-script=/usr/bin/numlockx on
session-setup-script=/usr/bin/login.sh

在此配置下,LightDM 会在之前登录过的用户每次登录时运行脚本。但是,当没有主目录的新用户尝试登录时,会出现登录循环,引导新用户再次进入欢迎界面。

经过审计我们发现,新登录用户的自动创建的主目录的所有权为 root:root

drwx------  6 root        root        4096 Jun  7 12:10 newuser/

仅当用户以前从未登录过时才会发生这种情况。

我尝试将 session-setup-script/etc/lightdm/lightdm.conf置于以下变体下:

$ cat /etc/lightdm/lightdm.conf

[Seat:*]
user-session=ubuntu
greeter-session=unity-greeter
session-setup-script=/usr/bin/login.sh

$ cat /etc/lightdm/lightdm.conf

[SeatDefaults]
user-session=ubuntu
greeter-session=unity-greeter
session-setup-script=/usr/bin/login.sh

$ cat /etc/lightdm/lightdm.conf

[LightDM]
user-session=ubuntu
greeter-session=unity-greeter
session-setup-script=/usr/bin/login.sh

也尝试lightdm.conf/usr/share/lightdm/lightdm.conf.d/

这些方法都不起作用。行为相同!

因此,当我尝试运行此脚本时,没有主目录的新用户无法登录 Unity。但如果用户之前已登录(使用正确所有权创建的主目录),他们可以继续使用自定义的 Unity。

我搜索了 lightdm、pam 和 linux 登录脚本。但找不到这个问题的答案。有人能帮忙创建具有正确权限的新用户的主目录吗?

相关内容