어제 저는 커스텀 KDE 4.10 저장소를 사용하여 데비안 위지(Debian Wheezy) 를 처음부터 다시 설치했는데 , 이전에도 잘 작동했지만 이제는 훨씬 더 잘 작동합니다.
내가 가진 유일한 문제는 KDM에 관한 것이 었는데, 자동으로 시작되지 않았기 때문에 전혀 설치되지 않은 것으로 보입니다. 다른 PC에 동일한 저장소를 사용하여 동일한 설치를 수행했기 때문에 내 관심을 끄는 무언가는 좋아.
문제의 원인을 찾던 중, 다음 내용이 포함되어야 하는 /etc/init.d/kdm 파일이 생성되지 않았다는 것을 발견했습니다.
#! / bin / sh -e ### BEGIN INIT INFO # 제공 : kdm # Required-Start : $ local_fs $ remote_fs # Required-Stop : $ 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 # 간단한 설명 : KDE 용 X 디스플레이 관리자 # 설명 : KDM은 X 서버 모음을 관리합니다. 로컬 호스트 또는 원격 시스템에 있어야합니다.
### END INIT INFO # /etc/init.d/kdm : X 디스플레이 관리자 시작 또는 중지 # xdm 패키지에서 원래 도난당한 스크립트 # # 설명 : K Display Manager # # LSB init 함수를 가져옵니다. / lib / lsb / init-functions # [-r / etc / default / locale] 인 경우 로케일 설정; 그때. / etc / default / locale export LANG LANGUAGE fi # 기본 디스플레이 관리자가 아니더라도 kdm을 시작하려면 # HEED_DEFAULT_DISPLAY_MANAGER를 "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 () {# kdm 사용자 정의를 지원하는 매개 변수 KDMRC = / etc / kde4 / kdm / kdmrc BACKGROUNDRC = / etc / kde4 / kdm / backgroundrc # kdmtheme 또는 기타 도구에 의해 구성이 변경된 경우 , magick를하지 마십시오 if grep -q "^ [[: space :]] * Theme = @@@ ToBeReplacedByDesktopBase @@@"$ {KDMRC}; then KDMOVERRIDEDIR = / etc / default / kdm.d KDMCFGDIR = / var / run / kdm KDMCFG = $ KDMCFGDIR / kdmrc BACKGROUNDCFG = $ KDMCFGDIR / backgroundrc DEFAULT_KDM_THEME = / kdmx / ariya-apps / kdmx / share / testiya-THEME / share / testiya-THEME / 공유 / 앱 / kdde4 $ DAEMON || exit 0 # 자동 로그온이 런레벨에 종속되도록하려면 주석 해제 #test "$ runlevel"|| {runlevel =`runlevel`; 런레벨 = $ {런레벨 # *}; } #test "$ 런레벨"= 4 && ARG = -autolog || ARG = -noautolog # 주석 해제, syslog에서 많은 디버그 정보를 원하면 #ARG = "$ ARG -debug 255"# 대체 kdm 마스터 구성 파일을 사용합니다. ARG = "$ ARG -config $ KDMCFG"# kdm을 생성합니다. 설정 파일 genkdmconf --in $ KDMCFGDIR 1> / dev / null # 소스 오버라이드. run-parts는 예측 가능한 순서로 목록을 정렬합니다. if [-d "$ KDMOVERRIDEDIR"]; $ (run-parts --list "$ KDMOVERRIDEDIR"2> / dev / null || true); 씨. "$ part"done fi # kdm 구성 파일을 업데이트합니다 (재정의 된 값만) [-n "$ USEBACKGROUND"] && sed -i "s | ^ # \? UseBackground =. * | UseBackground = $ USEBACKGROUND |" $ 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 | ^ # \? 테마 =. * | 테마 = $ 테마 |" $ KDMCFG [-n "$ LANGUAGE"] && sed -i "s | ^ # \? 언어 =. * | 언어 = $ LANGUAGE |" $ KDMCFG if grep -q "^ [[: space :]] * Wallpaper = stripes.png"$ {BACKGROUNDRC}; then [-n "$ WALLPAPER"] && [-e "$ WALLPAPER"] && sed -i "s | ^ # \? Wallpaper =. * | Wallpaper =`readlink -f $ WALLPAPER` |" $ BACKGROUNDCFG fi # usetheme는 이제 "기본적으로"설정되어 있으므로 Theme가 유효하지 않은지 확인해야합니다 ...
sed -i "s|@@@ToBeReplacedByDesktopBase@@@|$DEFAULT_KDM_THEME|" ${KDMCFG} # 자동 로그인 재정의는 라이브 데비안 환경에 유용합니다 if [ -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 } # 데몬을 업그레이드한 경우 inode가 변경되므로 start-stop-daemon에 --exec 인수를 사용할 수 없습니다. 여기서 위험한 점은 데몬이 종료되고, pidfile이 정리되지 않았으며, 다른 프로세스가 해당 pid에서 실행 중인 경우 start-stop-daemon이 무해한 프로세스에 신호를 보낼 수 있다는 것입니다. 하지만 이건 예외적인 경우인 듯합니다.
# C'est la vie!
if [-e $ UPGRADEFILE]; then 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 # 데몬이 자신의 pidfile을 제거하지 않으면 우리는 rm -f $ PIDFILE $ UPGRADEFILE false fi; } case "$ 1"in start) setup_config if [-e $ DEFAULT_DISPLAY_MANAGER_FILE] && [ "$ HEED_DEFAULT_DISPLAY_MANAGER"= "true"] && [ "$ (cat $ DEFAULT_DISPLAY_MANAGER_FILE)"! = "$ DAEMON"]; then log_action_msg "K 디스플레이 관리자 (kdm)를 시작하지 않습니다. 기본 디스플레이 관리자가 아닙니다."
else log_daemon_msg "K 디스플레이 관리자 시작" "kdm"if start-stop-daemon --start --quiet $ SSD_ARGS-$ ARG; then log_end_msg 0 else log_action_end_msg 1 "이미 실행 중"fi fi ;; 재시작) /etc/init.d/kdm stop if [-f $ PIDFILE]; 다음 if still_running; 그런 다음 종료 1 fi fi /etc/init.d/kdm start ;; reload) log_action_begin_msg "K Display Manager 구성 다시로드 중 ..."
if start-stop-daemon --stop --signal 1 --quiet $ SSD_ARGS; then log_action_end_msg 0 else log_action_end_msg 1 "kdm이 실행되지 않음"fi ;; 강제 다시로드) /etc/init.d/kdm 다시로드 ;; stop) log_action_begin_msg "K 디스플레이 관리자 중지 : kdm"if [! -f $ PIDFILE]; then log_action_end_msg 0 "실행되지 않음 ($ PIDFILE을 찾을 수 없음)"exit 0 else DAEMONPID = $ (cat $ PIDFILE | tr -d '[: 공백 :]') KILLCOUNT = 1 if [! -e $ UPGRADEFILE]; 다음 경우 start-stop-daemon --stop --quiet $ SSD_ARGS; then # kdm의 시그널 핸들러에게 숨을 쉴 수 있도록 잠시 시간을줍니다 1 else log_action_cont_msg "not running"fi fi while [$ KILLCOUNT -le 5]; still_running이면 수행하십시오. then kill $ DAEMONPID else break fi sleep 1 KILLCOUNT = $ (($ KILLCOUNT + 1)) done if still_running; then log_action_cont_msg "TERM 신호에 응답하지 않음 (pid $ DAEMONPID)"else rm -f $ UPGRADEFILE fi fi log_action_end_msg 0 ;; 상태) status_of_proc -p "$ PIDFILE" "$ DAEMON"kdm && exit 0 || $를 종료 하시겠습니까?
;; *) echo "사용법: /etc/init.d/kdm {시작|중지|재시작|다시 로드|강제 다시 로드|상태}" 종료 1 ;; esac 종료 0
이 파일이 다른 PC에 있다고 말했지만 어제 밤에 볼 수 없었습니다. 다른 대안을 보여 드리겠습니다.
내가 찾은 해결책은 KDM 또는 시작하려는 다른 응용 프로그램에 사용되는 자체 시작 스크립트를 만드는 것이 었습니다. 여기에는 다음이 포함됩니다.
#! / bin / sh 경로 = / sbin : / bin. /lib/init/vars.sh. / lib / lsb / init-functions case "$ 1"in start | "") / usr / bin / kdm ;; 중지) # 작동하지 않음 ;; *) echo "사용법 : kdm [start | stop | restart]"> & 2 exit 3 ;; 그 C
KDM을 자동으로 시작하려면 해당 스크립트를 활성화해야 하므로 저는 RCConf를 사용합니다 . 이게 전부입니다. 하지만 저는 원래 스크립트를 사용하는 것을 권장합니다.