Linux

登錄時從 pam_exec 環境顯示對話框?

  • January 25, 2013

pam_exec用來做一些根任務。他們需要一些時間,我想告訴使用者稍等片刻。

我正在那裡完成任務,而不是稍後,因為我需要:

  • 根權限
  • 在桌面上傳入任何內容之前從伺服器同步主文件

我的問題是:我無法顯示顯示任何內容的視窗。我正在載入此腳本pam_exec以測試這是一個$DISPLAY問題還是使用者問題:

#!/bin/bash

case "$PAM_TYPE" in

   'open_session')

   echo Plain exec &> /tmp/pamexec_output
   yad &>> /tmp/pamexec_output
   echo Set display &>> /tmp/pamexec_output
   DISPLAY=:0 yad &>> /tmp/pamexec_output
   echo Set user lightdm &>> /tmp/pamexec_output
       sudo -u lightdm yad &>> /tmp/pamexec_output
   echo Set user $PAM_USER &>> /tmp/pamexec_output
       sudo -u $PAM_USER yad &>> /tmp/pamexec_output
   echo Set user lightdm and display &>> /tmp/pamexec_output
   DISPLAY=:0 sudo -u lightdm yad &>> /tmp/pamexec_output
   echo Set user $PAM_USER and display &>> /tmp/pamexec_output
   DISPLAY=:0 sudo -u $PAM_USER yad &>> /tmp/pamexec_output
   echo PS AUX &>> /tmp/pamexec_output
   ps aux &>> /tmp/pamexec_output

   ;;

esac

我無法得到答案 沒有顯示視窗,輸出:

Plain exec
No protocol specified
No protocol specified

(yad:25314): Gtk-WARNING **: cannot open display: :0
Set display
No protocol specified
No protocol specified

(yad:25317): Gtk-WARNING **: cannot open display: :0
Set user lightdm
No protocol specified
No protocol specified

(yad:25321): Gtk-WARNING **: cannot open display: :0
Set user jorge.suarez
No protocol specified
No protocol specified

(yad:25325): Gtk-WARNING **: cannot open display: :0
Set user lightdm and display
No protocol specified
No protocol specified

(yad:25328): Gtk-WARNING **: cannot open display: :0
Set user jorge.suarez and display
No protocol specified
No protocol specified

(yad:25331): Gtk-WARNING **: cannot open display: :0

作為獎勵,這是最終輸出,來自ps aux. 也許這會有所幫助:

PS AUX
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.2  26684  2488 ?        Ss   Jan24   0:01 /sbin/init
root         2  0.0  0.0      0     0 ?        S    Jan24   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    Jan24   0:00 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S    Jan24   0:00 [kworker/u:0]
root         6  0.0  0.0      0     0 ?        S    Jan24   0:00 [migration/0]
root         7  0.0  0.0      0     0 ?        S    Jan24   0:00 [watchdog/0]
root         8  0.0  0.0      0     0 ?        S<   Jan24   0:00 [cpuset]
root         9  0.0  0.0      0     0 ?        S<   Jan24   0:00 [khelper]
root        10  0.0  0.0      0     0 ?        S    Jan24   0:00 [kdevtmpfs]
root        11  0.0  0.0      0     0 ?        S<   Jan24   0:00 [netns]
root        12  0.0  0.0      0     0 ?        S    Jan24   0:00 [sync_supers]
root        13  0.0  0.0      0     0 ?        S    Jan24   0:00 [bdi-default]
root        14  0.0  0.0      0     0 ?        S<   Jan24   0:00 [kintegrityd]
root        15  0.0  0.0      0     0 ?        S<   Jan24   0:00 [kblockd]
root        16  0.0  0.0      0     0 ?        S<   Jan24   0:00 [ata_sff]
root        17  0.0  0.0      0     0 ?        S    Jan24   0:00 [khubd]
root        18  0.0  0.0      0     0 ?        S<   Jan24   0:00 [md]
root        21  0.0  0.0      0     0 ?        S    Jan24   0:00 [khungtaskd]
root        22  0.0  0.0      0     0 ?        S    Jan24   0:00 [kswapd0]
root        23  0.0  0.0      0     0 ?        SN   Jan24   0:00 [ksmd]
root        24  0.0  0.0      0     0 ?        SN   Jan24   0:00 [khugepaged]
root        25  0.0  0.0      0     0 ?        S    Jan24   0:00 [fsnotify_mark]
root        26  0.0  0.0      0     0 ?        S    Jan24   0:00 [ecryptfs-kthrea]
root        27  0.0  0.0      0     0 ?        S<   Jan24   0:00 [crypto]
root        35  0.0  0.0      0     0 ?        S<   Jan24   0:00 [kthrotld]
root        36  0.0  0.0      0     0 ?        S    Jan24   0:00 [scsi_eh_0]
root        37  0.0  0.0      0     0 ?        S    Jan24   0:08 [scsi_eh_1]
root        38  0.0  0.0      0     0 ?        S    Jan24   0:00 [kworker/u:2]
root        59  0.0  0.0      0     0 ?        S<   Jan24   0:00 [devfreq_wq]
root       206  0.0  0.0      0     0 ?        S    Jan24   0:02 [jbd2/vda5-8]
root       207  0.0  0.0      0     0 ?        S<   Jan24   0:00 [ext4-dio-unwrit]
root       227  0.0  0.1  30844  1256 ?        S    Jan24   0:00 mountall --daemon
root       302  0.0  0.0  17224   640 ?        S    Jan24   0:00 upstart-udev-bridge --daemon
root       305  0.0  0.2  24524  2172 ?        Ss   Jan24   0:00 /sbin/udevd --daemon
root       431  0.0  0.0      0     0 ?        S<   Jan24   0:00 [kpsmoused]
root       504  0.0  0.1  19192  1032 ?        Ss   Jan24   0:00 rpcbind -w
root       513  0.0  0.0      0     0 ?        S    Jan24   0:00 [jbd2/vda6-8]
root       514  0.0  0.0      0     0 ?        S<   Jan24   0:00 [ext4-dio-unwrit]
root       532  0.0  0.0  15180   404 ?        S    Jan24   0:00 upstart-socket-bridge --daemon
root       570  0.0  0.0      0     0 ?        S    Jan24   0:00 [jbd2/vda7-8]
root       573  0.0  0.0      0     0 ?        S<   Jan24   0:00 [ext4-dio-unwrit]
root       655  0.0  0.0      0     0 ?        S<   Jan24   0:00 [rpciod]
root       658  0.0  0.0      0     0 ?        S<   Jan24   0:00 [nfsiod]
root       669  0.0  0.2  49948  2716 ?        Ss   Jan24   0:00 /usr/sbin/sshd -D
102        679  0.0  0.2  27184  2536 ?        Ss   Jan24   0:17 dbus-daemon --system --fork --activation=upstart
root       709  0.0  0.3  79036  3096 ?        Ss   Jan24   0:00 /usr/sbin/modem-manager
root       717  0.0  0.1  21180  1692 ?        Ss   Jan24   0:00 /usr/sbin/bluetoothd
syslog     733  0.0  0.1 249464  1404 ?        Sl   Jan24   0:02 rsyslogd -c5
root       738  0.0  0.5 229848  5260 ?        Ssl  Jan24   0:05 NetworkManager
root       746  0.0  0.0      0     0 ?        S<   Jan24   0:00 [krfcommd]
root       756  0.0  0.6 188336  5844 ?        Sl   Jan24   0:23 /usr/lib/policykit-1/polkitd --no-debug
statd      773  0.0  0.1  21496  1312 ?        Ss   Jan24   0:00 rpc.statd -L
avahi      780  0.0  0.1  34396  1716 ?        S    Jan24   0:00 avahi-daemon: registering [ctdeskxyy.local]
avahi      781  0.0  0.0  34268   472 ?        S    Jan24   0:00 avahi-daemon: chroot helper
root       787  0.0  0.1   7256  1508 ?        S    Jan24   0:00 /sbin/dhclient -d -4 -sf /usr/lib/NetworkManager/nm-dhcp-client.action -pf /var/run/sendsigs.omit.d/network-manager.dhclient-eth0.pid -lf /var/lib/dhcp/dhclient-05584152-142d-425d-b5b9-1e63697e0637-eth0.lease -cf /var/run/nm-dhclient-eth0.conf eth0
colord     808  0.0  1.2 491876 11588 ?        Sl   Jan24   0:01 /usr/lib/x86_64-linux-gnu/colord/colord
root       938  0.0  0.0  19980   932 tty4     Ss+  Jan24   0:00 /sbin/getty -8 38400 tty4
root       948  0.0  0.0  19980   940 tty5     Ss+  Jan24   0:00 /sbin/getty -8 38400 tty5
root       961  0.0  0.2  69768  1904 tty3     Ss   Jan24   0:00 /bin/login --             
root       964  0.0  0.0  19980   936 tty6     Ss+  Jan24   0:00 /sbin/getty -8 38400 tty6
root       983  0.0  0.0   4452   812 ?        Ss   Jan24   0:00 acpid -c /etc/acpi/events -s /var/run/acpid.socket
root       984  0.0  0.1  19104  1024 ?        Ss   Jan24   0:00 cron
daemon     985  0.0  0.0  16900   372 ?        Ss   Jan24   0:00 atd
root       991  0.0  0.3 262560  3396 ?        Ssl  Jan24   0:01 lightdm
whoopsie   993  0.0  0.5 202176  5024 ?        Ssl  Jan24   0:01 whoopsie
nobody    1001  0.0  0.1  33016  1252 ?        S    Jan24   0:00 /usr/sbin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file=/var/run/sendsigs.omit.d/network-manager.dnsmasq.pid --listen-address=127.0.0.1 --conf-file=/var/run/nm-dns-dnsmasq.conf --cache-size=0 --proxy-dnssec
root      1023  0.0  0.1 701376  1192 ?        Ssl  Jan24   0:00 /usr/sbin/nscd
nslcd     1111  0.0  0.2 443796  1916 ?        Ssl  Jan24   0:00 /usr/sbin/nslcd
root      1254  0.0  0.4 586496  4152 ?        Sl   Jan24   0:08 /usr/sbin/console-kit-daemon --no-daemon
root      1362  0.0  0.0      0     0 ?        S    Jan24   0:01 [flush-253:0]
root      1534  0.0  0.2  76052  2032 tty1     Ss   Jan24   0:00 /bin/login --              
root      1536  0.0  0.4 219940  4272 ?        Sl   Jan24   0:01 /usr/lib/upower/upowerd
rtkit     1567  0.0  0.1 160644  1136 ?        SNl  Jan24   0:00 /usr/lib/rtkit/rtkit-daemon
1000      1782  0.0  0.4  19556  4676 tty1     S    Jan24   0:00 -bash
root      1930  0.0  0.2  66712  1904 tty1     S    Jan24   0:00 sudo su
root      1931  0.0  0.1  66472  1816 tty1     S    Jan24   0:00 su
root      1941  0.0  0.2  17260  2324 tty1     S+   Jan24   0:01 bash
root      1965  0.0  0.0      0     0 ?        S    Jan24   0:00 [lockd]
root      2505  0.0  0.3 193524  3628 ?        Sl   Jan24   0:01 /usr/lib/udisks/udisks-daemon
root      2506  0.0  0.0  45512   804 ?        S    Jan24   0:00 udisks-daemon: not polling any devices
root      5436  0.0  0.4  98476  4256 ?        Ss   08:01   0:00 /usr/sbin/cupsd -F
root     11778  0.0  0.0      0     0 ?        S<   08:01   0:00 [xfs_mru_cache]
root     11779  0.0  0.0      0     0 ?        S<   08:01   0:00 [xfslogd]
root     11780  0.0  0.0      0     0 ?        S<   08:01   0:00 [xfsdatad]
root     11781  0.0  0.0      0     0 ?        S<   08:01   0:00 [xfsconvertd]
root     11784  0.0  0.0      0     0 ?        S    08:01   0:00 [jfsIO]
root     11785  0.0  0.0      0     0 ?        S    08:01   0:00 [jfsCommit]
root     11786  0.0  0.0      0     0 ?        S    08:01   0:00 [jfsSync]
root     13718  0.0  0.0      0     0 ?        Z    Jan24   0:00 [lightdm] <defunct>
root     14197  0.0  0.1  24520  1640 ?        S    08:03   0:00 /sbin/udevd --daemon
root     14198  0.0  0.0      0     0 ?        S<   08:03   0:00 [iprt]
root     16911  0.0  0.2  69768  1904 tty2     Ss   Jan24   0:00 /bin/login --             
root     18750  0.0  0.3 124052  3712 ?        Sl   09:12   0:00 /usr/lib/accountsservice/accounts-daemon
root     21715  0.0  0.0      0     0 ?        Z    09:20   0:00 [lightdm] <defunct>
4004     23593  0.0  0.3 207504  3592 ?        Sl   09:35   0:00 /usr/lib/deja-dup/deja-dup/deja-dup-monitor
root     24087  0.0  0.0      0     0 ?        S    09:42   0:00 [kworker/0:1]
root     24355  0.0  0.0      0     0 ?        S    09:47   0:00 [kworker/0:2]
root     24581  0.1  2.6 122056 24912 ?        SN   09:48   0:00 /usr/bin/python /usr/sbin/aptd
root     25026  0.1  0.0      0     0 ?        S    09:52   0:00 [kworker/0:0]
root     25134  1.8  2.6 148396 25280 tty7     Ss+  09:53   0:00 /usr/bin/X :0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
root     25226  0.0  0.3 155028  3136 ?        Sl   09:53   0:00 lightdm --session-child 12 385
lightdm  25258  0.1  0.5 344020  5200 ?        S<l  09:53   0:00 /usr/bin/pulseaudio --start --log-target=syslog
lightdm  25263  0.0  0.3  95984  3240 ?        S    09:53   0:00 /usr/lib/pulseaudio/pulse/gconf-helper
root     25313  0.0  0.1  16516  1376 ?        Ss   09:54   0:00 /bin/bash /usr/local/lib/puppet-files/gestion-sesiones.sh log=/tmp/cosaaaa
root     25334  0.0  0.1  14144  1020 ?        R    09:54   0:00 ps aux
4004     26833  0.0  0.5 362740  5676 ?        S<l  Jan24   0:01 /usr/bin/pulseaudio --start --log-target=syslog
4004     26836  0.0  0.3  95968  3256 ?        S    Jan24   0:00 /usr/lib/pulseaudio/pulse/gconf-helper
root     28396  0.0  0.0      0     0 ?        Z    Jan24   0:00 [lightdm] <defunct>
4004     29073  0.0  0.4  19536  4660 tty2     S+   Jan24   0:00 -bash
4004     29256  0.0  0.4  19488  4468 tty3     S+   Jan24   0:00 -bash

另一個有趣的發現。這個腳本:

#!/bin/bash

case "$PAM_TYPE" in

   'open_session')

   (
        sleep 5
        yad &> /tmp/pam_output
   ) &

   ;;

esac

它可以工作,但是在載入桌面後會顯示視窗。所以這無濟於事。

它也可以在註銷時使用,那裡沒問題。

關於如何解決這個問題的任何想法?

您可以讓 pam_exec 寫入文件(就像您一樣,使用 /tmp/pam_output),而不是讓通知發生在 pam_exec 中,並在使用者登錄之前由 lightdm 執行一個單獨的守護程序,它監視 /tmp/pam_output 和當它看到新的輸出時會彈出一個註釋。lightdm 執行的後台程序已經設置了 X 環境和 X11 cookie,並且將在 lightdm 使用者而不是 root 的上下文中執行,這無論如何都更安全。請參閱此文件,了解在歡迎程序啟動時啟動腳本。

引用自:https://unix.stackexchange.com/questions/62524