สคริปต์เพื่อเริ่ม KDM (ในกรณีที่ไม่มี)

เดเบียนไลท์_kdm

เมื่อวานนี้ฉันได้ติดตั้งDebian Wheezy ใหม่ทั้งหมดโดยใช้คลัง ซอฟต์แวร์KDE 4.10 ที่ฉันปรับแต่งเอง และต้องบอกว่าหากก่อนหน้านี้ใช้งานได้ดีอยู่แล้ว ตอนนี้มันทำงานได้ดียิ่งขึ้นไปอีก

ปัญหาเดียวที่ฉันมีคือ KDM ซึ่งดูเหมือนว่าจะติดตั้งได้ไม่ดีเลยเพราะมันไม่ต้องการเริ่มโดยอัตโนมัติสิ่งที่ดึงดูดความสนใจของฉันเพราะฉันทำการติดตั้งแบบเดียวกันโดยมีที่เก็บเดียวกันบนพีซีเครื่องอื่นและทุกอย่างก็ไปได้ดี .

ในระหว่างการค้นหาสาเหตุของปัญหา ฉันพบว่าไฟล์ /etc/init.d/kdmไม่ได้ถูกสร้างขึ้นซึ่งควรมีเนื้อหาดังต่อไปนี้:

#! / bin / sh -e ### BEGIN INIT INFO # ให้: kdm # Required-Start: $ local_fs $ remote_fs # Required-Stop: $ local_fs $ remote_fs # ควรเริ่ม: 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 จัดการชุดเซิร์ฟเวอร์ X ซึ่งอาจ อยู่บนโลคัลโฮสต์หรือเครื่องระยะไกล
### END INIT INFO # /etc/init.d/kdm: เริ่มหรือหยุด X display manager # Script ที่ขโมยมาจากแพ็คเกจ xdm # # description: K Display Manager # # นำเข้าฟังก์ชันเริ่มต้น LSB / 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 หรือเครื่องมืออื่น อย่าทำเวทถ้า grep -q "^ [: space:]] * Theme = @@@ ToBeReplacedByDesktopBase @@@" $ {KDMRC}; จากนั้น KDMOVERRIDEDIR = / etc / default / kdm.d KDMCFGDIR = / var / run / kdm KDMCFG = $ KDMCFGDIR / kdmrc BACKGROUNDCFG = $ KDMCFGDIR / backgroundrc DEFAULT_KDM_THEME = / kdiyade4 themes / ariya-test / apps / ariya-test / apps $ DAEMON || ออกจาก 0 # uncomment ถ้าคุณต้องการให้การเข้าสู่ระบบอัตโนมัติขึ้นอยู่กับระดับการวิ่ง #test "$ runlevel" || {runlevel = `runlevel`; runlevel = $ {runlevel # *}; } #test "$ runlevel" = 4 && ARG = -autolog || ARG = -noautolog # uncomment หากคุณต้องการข้อมูลการดีบักจำนวนมากใน syslog #ARG = "$ ARG -debug 255" # เราใช้ไฟล์กำหนดค่าหลัก kdm ทางเลือก ARG = "$ ARG -config $ KDMCFG" # เราสร้าง kdm ไฟล์คอนฟิกูเรชัน genkdmconf - ใน $ KDMCFGDIR 1> / dev / null # เราซอร์สแทนที่ run-parts จัดเรียงรายการตามลำดับที่คาดเดาได้ถ้า [-d "$ KDMOVERRIDEDIR"]; จากนั้นสำหรับส่วนใน $ (run-parts --list "$ KDMOVERRIDEDIR" 2> / dev / null || true); ค. "$ part" เสร็จแล้ว 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 | ^ # \? Theme =. * | Theme = $ THEME |" $ KDMCFG [-n "$ LANGUAGE"] && sed -i "s | ^ # \? Language =. * | ภาษา = $ LANGUAGE |" $ KDMCFG ถ้า grep -q "^ [[: space:]] * Wallpaper = Stripes.png" $ {BACKGROUNDRC}; แล้ว [-n "$ WALLPAPER"] && [-e "$ WALLPAPER"] && sed -i "s | ^ # \? Wallpaper =. * | Wallpaper =` readlink -f $ WALLPAPER` | " $ BACKGROUNDCFG fi # usetheme เปิดใช้งาน "โดยค่าเริ่มต้น" แล้วดังนั้นเราต้องแน่ใจว่า Theme ไม่ถูกต้อง ...
sed -i "s|@@@ToBeReplacedByDesktopBase@@@|$DEFAULT_KDM_THEME|" ${KDMCFG} # การแทนที่การล็อกอินอัตโนมัติมีประโยชน์สำหรับสภาพแวดล้อม Debian สด หาก [ -n "$AUTOLOGINUSER" ]; จากนั้น 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 } # หากเราอัปเกรด daemon แล้ว เราไม่สามารถใช้ข้อโต้แย้ง --exec เพื่อ start-stop-daemon ได้ เนื่องจาก inode จะมีการเปลี่ยนแปลง  ความเสี่ยงที่นี่ก็คือ # ในสถานการณ์ที่ daemon ตาย pidfile ของมันจะไม่ได้รับการล้าง และมีกระบวนการอื่นกำลังทำงานภายใต้ pid นั้น start-stop-daemon จะส่งสัญญาณไปยังกระบวนการที่ไม่มีความผิด  อย่างไรก็ตาม นี่ดูเหมือนเป็นกรณีพิเศษ
# C'est la vie!
ถ้า [-e $ UPGRADEFILE]; แล้ว 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; แล้ว true else # ถ้า daemon ไม่ลบ pidfile ของตัวเองเราจะ rm -f $ PIDFILE $ UPGRADEFILE false fi; } case "$ 1" ในการเริ่มต้น) setup_config ถ้า [-e $ DEFAULT_DISPLAY_MANAGER_FILE] && ["$ HEED_DEFAULT_DISPLAY_MANAGER" = "true"] && ["$ (cat $ DEFAULT_DISPLAY_MANAGER_FILE)"! "] จากนั้น log_action_msg "ไม่เริ่ม K Display Manager (kdm) ไม่ใช่ตัวจัดการการแสดงเริ่มต้น"
อื่น log_daemon_msg "การเริ่มต้น K Display Manager" "kdm" ถ้า start-stop-daemon --start --quiet $ SSD_ARGS - $ ARG; จากนั้น log_end_msg 0 else log_action_end_msg 1 "ทำงานอยู่แล้ว" fi fi ;; เริ่มต้นใหม่) /etc/init.d/kdm หยุดถ้า [-f $ PIDFILE]; แล้วถ้า still_running; จากนั้นออกจาก 1 fi fi /etc/init.d/kdm start ;; โหลดใหม่) log_action_begin_msg "กำลังโหลดการกำหนดค่า K Display Manager อีกครั้ง ... "
ถ้า start-stop-daemon --stop --signal 1 --quiet $ SSD_ARGS; log_action_end_msg 0 else log_action_end_msg 1 "kdm ไม่ทำงาน" fi ;; แรงรีโหลด) /etc/init.d/kdm รีโหลด ;; หยุด) log_action_begin_msg "การหยุด K Display Manager: kdm" ถ้า [! -f $ PIDFILE]; log_action_end_msg 0 "ไม่ทำงาน (ไม่พบ $ PIDFILE)" ออกจาก 0 else DAEMONPID = $ (cat $ PIDFILE | tr -d '[: blank:]') KILLCOUNT = 1 if [! -e $ UPGRADEFILE]; แล้วถ้า start-stop-daemon --stop --quiet $ SSD_ARGS; จากนั้นให้ # ให้ตัวจัดการสัญญาณของ kdm เป็นวินาทีเพื่อจับลมหายใจให้หลับ 1 else log_action_cont_msg "ไม่ทำงาน" fi fi ในขณะที่ [$ KILLCOUNT -le 5]; ทำถ้า still_running; จากนั้นฆ่า $ DAEMONPID อื่นหยุดการนอนหลับ 1 KILLCOUNT = $ (($ KILLCOUNT + 1)) เสร็จสิ้นหาก still_running; log_action_cont_msg "ไม่ตอบสนองต่อสัญญาณ TERM (pid $ DAEMONPID)" else rm -f $ UPGRADEFILE fi fi log_action_end_msg 0 ;; status) status_of_proc -p "$ PIDFILE" "$ DAEMON" kdm && ออก 0 || ออกจาก $?
;; *) echo "การใช้งาน: /etc/init.d/kdm {start|stop|restart|reload|force-reload|status}" ออก 1 ;; esac ออก 0
นี่คือสิ่งที่กล่าวว่าไฟล์มีในพีซีเครื่องอื่น แต่เมื่อคืนฉันไม่เห็นมันฉันแสดงทางเลือกอื่นให้คุณ

วิธีแก้ปัญหาที่ฉันพบคือสร้างสคริปต์เริ่มต้นของฉันเองซึ่งใช้สำหรับ KDM หรือแอปพลิเคชันอื่น ๆ ที่เราต้องการเริ่มต้นซึ่งมีสิ่งนี้:

#! / bin / sh PATH = / sbin: / bin /lib/init/vars.sh. / lib / lsb / init-functions case "$ 1" ในการเริ่มต้น | "") / usr / bin / kdm ;; หยุด) # No-op ;; *) echo "การใช้งาน: kdm [start | stop | restart]"> & 2 ออก 3 ;; ว่า C

ทีนี้ เพื่อให้ KDM เริ่มทำงานโดยอัตโนมัติ จำเป็นต้องเปิดใช้งานสคริปต์นั้น ดังนั้นผมจึงใช้RCConfในการทำเช่นนั้น และนั่นก็คือทั้งหมดครับ อย่างไรก็ตาม ผมแนะนำให้ใช้เวอร์ชันดั้งเดิมมากกว่าครับ 


เพิ่มเป็นแหล่งข้อมูลที่ต้องการใน Google