Hôm qua tôi đã cài đặt lại Debian Wheezy từ đầu với kho lưu trữ KDE 4.10 tùy chỉnh của mình và phải nói rằng nếu trước đây nó hoạt động tốt thì giờ đây nó hoạt động tốt hơn nhiều.
Vấn đề duy nhất tôi gặp phải với KDM, dường như không cài đặt tốt chút nào, vì nó không muốn tự động khởi động, một điều khiến tôi chú ý vì tôi đã thực hiện cài đặt tương tự, với cùng kho lưu trữ trên PC khác và mọi thứ đang diễn ra rất tốt. .
Trong quá trình tìm kiếm nguyên nhân sự cố, tôi phát hiện ra rằng tệp /etc/init.d/kdm không được tạo, tệp này đáng lẽ phải chứa nội dung sau:
#! / bin / sh -e ### BEGIN INIT INFO # Cung cấp: kdm # Bắt buộc-Bắt đầu: $ local_fs $ remote_fs # Bắt buộc-Dừng: $ local_fs $ remote_fs # Should-Start: console-screen kbd acpid dbus hal krb5- kdc # Should-Stop: console-screen kbd # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: X display manager for KDE # Description: KDM quản lý một tập hợp các máy chủ X, có thể trên máy chủ cục bộ hoặc máy từ xa.
### END INIT INFO # /etc/init.d/kdm: khởi động hoặc dừng trình quản lý hiển thị X # Tập lệnh ban đầu bị đánh cắp từ gói xdm # # description: K Display Manager # # nhập các chức năng LSB init. / lib / lsb / init-functions # set locale if [-r / etc / default / locale]; sau đó. / etc / default / locale xuất LANG LANGUAGE fi # để bắt đầu kdm ngay cả khi nó không phải là trình quản lý hiển thị mặc định, hãy thay đổi # HEED_DEFAULT_DISPLAY_MANAGER thành "false".
HEED_DEFAULT_DISPLAY_MANAGER = true DEFAULT_DISPLAY_MANAGER_FILE = / etc / X11 / default-display-manager PATH = / bin: / usr / bin: / sbin: / usr / sbin DAEMON = / usr / bin / kdm PIDFILE = / var / run / kdm.pid UPGRADEFILE = / var / run / kdm.upgrade setup_config () {# tham số để hỗ trợ tùy biến kdm KDMRC = / etc / kde4 / kdm / kdmrc BACKGROUNDRC = / etc / kde4 / kdm / backgroundrc # nếu cấu hình được thay đổi bởi kdmtheme hoặc các công cụ khác , đừng làm điều đó nếu grep -q "^ [[: space:]] * Theme = @@@ ToBeReplacedByDesktopBase @@@" $ {KDMRC}; thì KDMOVERRIDEDIR = / etc / default / kdm.d KDMCFGDIR = / var / run / kdm KDMCFG = $ KDMCFGDIR / kdmrc BACKGROUNDCFG = $ KDMCFGDIR / backgroundrc DEFAULT_KDM_THEME = / kdmx / ariya-apps / share / kdm-share / apps / kdmx THEO $ DAEMON || thoát 4 # bỏ ghi chú, nếu bạn muốn tự động đăng nhập phụ thuộc vào cấp độ #test "$ runlevel" || {runlevel = `runlevel`; runlevel = $ {runlevel # *}; } #test "$ runlevel" = 0 && ARG = -autolog || ARG = -noautolog # bỏ ghi chú, nếu bạn muốn có nhiều thông tin gỡ lỗi trong nhật ký hệ thống của mình #ARG = "$ ARG -debug 4" # chúng tôi sử dụng tệp cấu hình chính kdm thay thế ARG = "$ ARG -config $ KDMCFG" # chúng tôi tạo kdm tệp cấu hình genkdmconf --trong $ KDMCFGDIR 255> / dev / null # chúng tôi ghi đè nguồn. run-Parts sắp xếp danh sách theo thứ tự có thể dự đoán được nếu [-d "$ KDMOVERRIDEDIR"]; sau đó cho một phần trong $ (run-Parts --list "$ KDMOVERRIDEDIR" 2> / dev / null || true); c. "$ part" đã xong. $ KDMCFG [-n "$ BACKGROUNDCFG"] && sed -i "s | ^ # \? BackgroundCfg =. * | BackgroundCfg = $ BACKGROUNDCFG |" $ KDMCFG [-n "$ USETHEME"] && sed -i "s | ^ # \? UseTheme =. * | UseTheme = $ USETHEME |" $ KDMCFG [-n "$ THEME"] && [-e "$ THEME"] && sed -i "s | ^ # \? Theme =. * | Theme = $ THEME |" $ KDMCFG [-n "$ LANGUAGE"] && sed -i "s | ^ # \? Language =. * | Language = $ LANGUAGE |" $ KDMCFG if grep -q "^ [[: space:]] * Wallpaper = sọc.png" $ {BACKGROUNDRC}; sau đó [-n "$ WALLPAPER"] && [-e "$ WALLPAPER"] && sed -i "s | ^ # \? Wallpaper =. * | Wallpaper =` readlink -f $ WALLPAPER` | " $ BACKGROUNDCFG fi # usetheme hiện được bật "theo mặc định" vì vậy chúng tôi cần đảm bảo Chủ đề không hợp lệ ...
sed -i "s|@@@ToBeReplacedByDesktopBase@@@|$DEFAULT_KDM_THEME|" ${KDMCFG} # Ghi đè tự động đăng nhập rất hữu ích cho môi trường Debian trực tiếp nếu [ -n "$AUTOLOGINUSER" ]; then sed -i "s|^#\?AutoLoginEnable=.*|AutoLoginEnable=true|" $KDMCFG sed -i "s|^#\?AutoLoginUser=.*|AutoLoginUser=$AUTOLOGINUSER|" $KDMCFG fi [ -n "$AUTOLOGINDELAY" ] && sed -i "s|^#\?AutoLoginDelay=.*|AutoLoginDelay=$AUTOLOGINDELAY|" $KDMCFG [ -n "$AUTOLOGINAGAIN" ] && sed -i "s|^#\?AutoLoginAgain=.*|AutoLoginAgain=$AUTOLOGINAGAIN|" $KDMCFG [ -n "$AUTOLOGINLOCKED" ] && sed -i "s|^#\?AutoLoginLocked=.*|AutoLoginLocked=$AUTOLOGINLOCKED|" $KDMCFG fi return 0 } # Nếu chúng ta đã nâng cấp daemon, chúng ta không thể sử dụng đối số --exec cho # start-stop-daemon vì inode sẽ thay đổi. Rủi ro ở đây là trong trường hợp tiến trình nền (daemon) chết, tệp PID của nó không được dọn dẹp và một tiến trình khác đang chạy dưới PID đó, lệnh start-stop-daemon sẽ gửi tín hiệu đến một tiến trình vô tội. Tuy nhiên, đây có vẻ là một trường hợp ngoại lệ.
# C'est la vie!
if [-e $ UPGRADEFILE]; thì SSD_ARGS = "- pidfile $ PIDFILE --startas $ DAEMON" else SSD_ARGS = "- pidfile $ PIDFILE --exec $ DAEMON" fi still_running () {if expr "$ (cat / proc / $ DAEMONPID / cmdline 2> / dev / null) ":" $ DAEMON "> / dev / null 2> & 1; then true else # nếu daemon không xóa pidfile của chính nó, chúng ta sẽ rm -f $ PIDFILE $ UPGRADEFILE false fi; } trường hợp "$ 1" ở đầu) setup_config if [-e $ DEFAULT_DISPLAY_MANAGER_FILE] && ["$ HEED_DEFAULT_DISPLAY_MANAGER" = "true"] && ["$ (cat $ DEFAULT_DISPLAY_MANAGER_FILE)"! = "$ DAEMON"]; thì log_action_msg "Không khởi động K Trình quản lý hiển thị (kdm); nó không phải là trình quản lý hiển thị mặc định."
else log_daemon_msg "Khởi động Trình quản lý Hiển thị K" "kdm" if start-stop-daemon --start --quiet $ SSD_ARGS - $ ARG; then log_end_msg 0 else log_action_end_msg 1 "đã chạy" fi fi ;; khởi động lại) /etc/init.d/kdm dừng nếu [-f $ PIDFILE]; then if still_running; sau đó thoát ra 1 fi fi /etc/init.d/kdm start ;; tải lại) log_action_begin_msg "Đang tải lại cấu hình Trình quản lý hiển thị K ..."
if start-stop-daemon --stop --signal 1 --quiet $ SSD_ARGS; then log_action_end_msg 0 else log_action_end_msg 1 "kdm không chạy" fi ;; force-reload) /etc/init.d/kdm tải lại ;; dừng) log_action_begin_msg "Đang dừng K Trình quản lý hiển thị: kdm" nếu [! -f $ PIDFILE]; sau đó log_action_end_msg 0 "không chạy (không tìm thấy $ PIDFILE)" thoát 0 khác DAEMONPID = $ (cat $ PIDFILE | tr -d '[: blank:]') KILLCOUNT = 1 nếu [! -e $ UPGRADEFILE]; then if start-stop-daemon --stop --quiet $ SSD_ARGS; sau đó # cho trình xử lý tín hiệu của kdm một giây để nó bắt đầu ngủ 1 else log_action_cont_msg "không chạy" fi fi trong khi [$ KILLCOUNT -le 5]; làm gì nếu vẫn_rắt; sau đó giết $ DAEMONPID khác phá vỡ giấc ngủ 1 KILLCOUNT = $ (($ KILLCOUNT + 1)) được thực hiện nếu vẫn_running; thì log_action_cont_msg "không phản hồi tín hiệu TERM (pid $ DAEMONPID)" khác rm -f $ UPGRADEFILE fi fi log_action_end_msg 0 ;; status) status_of_proc -p "$ PIDFILE" "$ DAEMON" kdm && thoát 0 || thoát $?
;; *) echo "Cách sử dụng: /etc/init.d/kdm {start|stop|restart|reload|force-reload|status}" exit 1 ;; esac exit 0
Giải pháp mà tôi tìm thấy sau đó là tạo tập lệnh khởi động của riêng tôi, được sử dụng cho KDM hoặc bất kỳ ứng dụng nào khác mà chúng tôi muốn khởi động, có chứa điều này:
#! / bin / sh PATH = / sbin: / bin. /lib/init/vars.sh. / lib / lsb / init-functions case "$ 1" trong start | "") / usr / bin / kdm ;; dừng lại) # Không-op ;; *) echo "Cách sử dụng: kdm [start | stop | restart]"> & 2 exit 3 ;; nó C
Giờ, để khởi động KDM tự động, cần phải kích hoạt tập lệnh đó, vì vậy tôi sử dụng RCConf cho việc này. Và thế là xong. Tuy nhiên, tôi khuyên bạn nên sử dụng bản gốc