ดำเนินการคำสั่งในการเข้าสู่ระบบของผู้ใช้


23

ในระบบเดสก์ท็อป Linux ฉันต้องการรันคำสั่งเมื่อผู้ใช้ล็อกอิน

หลังจากอ่านโพสต์อื่นฉันพยายามแทรกคำสั่ง~/.bashrcแต่ไม่สำเร็จ ยิ่งกว่านั้นระบบใช้ส่วนต่อประสานกราฟิกสำหรับการล็อกอินของผู้ใช้ดังนั้นคำสั่งไม่ควรเกี่ยวข้องกับการเริ่มต้นของเชลล์

ฉันพยายามเพิ่มคำสั่งต่อท้ายหนึ่งในสคริปต์ที่/etc/profile.dไม่มีผลลัพธ์

มีวิธีอื่นในการทำเช่นนี้หรือไม่? ไฟล์ใดบ้างที่ระบบอ่านหลังจากเข้าสู่ระบบ?


คำตอบ:


21

ไม่รับประกันว่าตัวจัดการการแสดงผลกราฟิกจะอ่านไฟล์เริ่มต้นแบบคลาสสิก การเปลี่ยนแปลงนี้ระหว่างการแจกแจงและระหว่างผู้จัดการการแสดงผล หนึ่งในสิ่งต่อไปนี้ควรใช้งานได้

  1. ใช้วิธีดั้งเดิมของสภาพแวดล้อมเดสก์ท็อปเพื่อตั้งค่าแอปพลิเคชันเริ่มต้น รายละเอียดจะขึ้นอยู่กับ DE ที่คุณใช้ แต่คุณสามารถสร้างสคริปต์ที่รันคำสั่งของคุณและเพิ่มลงในรายการของแอปพลิเคชันเริ่มต้น ตัวอย่างเช่นในระบบของฉัน (Cinnamon) คุณสามารถทำได้ผ่าน "การตั้งค่าระบบ" => "แอปพลิเคชันเริ่มต้น"

  2. การใช้งาน~/.xprofile, นี้มีที่มาโดยอย่างน้อย GDM, LDM, LightDM และ LXDM ผู้จัดการการเข้าสู่ระบบ

  3. หากไม่ได้ผลใด ๆ ข้างต้นให้ลองเพิ่มคำสั่งไปที่~/.profile: นี่เป็นไฟล์เริ่มต้นหลักสำหรับเชลล์การเข้าสู่ระบบและสามารถอ่านได้โดยเชลล์กราฟิกบางตัวในการเข้าสู่ระบบ

  4. ตามที่ @derobert ชี้ให้เห็นในความคิดเห็นคุณสามารถใช้มาตรฐานเดสก์ท็อปฟรีได้ :

    ไดเรกทอรี Autostart คือ $ XDG_CONFIG_DIRS / autostart ตามที่กำหนดไว้ในส่วน "อ้างอิงข้อมูลจำเพาะนี้" ใน "ข้อมูลจำเพาะไดเรกทอรีฐานเดสก์ทอป"

    หากชื่อไฟล์เดียวกันอยู่ภายใต้ Autostart Directories หลาย ๆ ไฟล์ควรใช้เฉพาะไดเรกทอรีที่สำคัญที่สุดเท่านั้น

    ตัวอย่าง: หาก $ XDG_CONFIG_HOME ไม่ได้ตั้งค่า Autostart Directory ในโฮมไดเร็กตอรี่ของผู้ใช้คือ ~ / .config / autostart /

    ตัวอย่าง: ถ้า $ XDG_CONFIG_DIRS ไม่ได้ถูกตั้งค่า Autostart Directory ให้เป็นระบบ / etc / xdg / autostart /

    ตัวอย่าง: หาก $ XDG_CONFIG_HOME และ $ XDG_CONFIG_DIRS ไม่ได้ถูกตั้งค่าและไฟล์สองไฟล์ /etc/xdg/autostart/foo.desktop และ ~ / .config / autostart / foo.desktop จะมีอยู่เพียงไฟล์ ~ / .config / autostart / foo.desktop เท่านั้น เดสก์ท็อปจะถูกใช้เพราะ ~ / .config / autostart / มีความสำคัญมากกว่า / etc / xdg / autostart /

~/.bashrcไม่เกี่ยวข้องสมบูรณ์นี่มันจะถูกอ่านโดยเฉพาะหอยที่ไม่ใช่การเข้าสู่ระบบแบบโต้ตอบจึงจะถูกละเว้นบนเปลือกหอยเข้าสู่ระบบกราฟิกหรือไม่


5
อาจต้องการที่จะพูดถึง~/.config/autostartและ/etc/xdg/autostart/ซึ่งจะเป็นสถานที่ที่ได้มาตรฐานตามที่สก์ท็อปแอพลิเคชัน Autostart ข้อมูลจำเพาะ และยังและ/etc/X11/Xsession.d ~/.xsession
Derobert

6

อีกทางเลือกหนึ่งคือใช้แพม - นี่จะให้วิธีที่แม่นยำในการกำหนดการกระทำในการเข้าสู่ระบบ

สำหรับการกระทำทั่วไปคุณสามารถพึ่งพา pam_exec ( http://manpages.ubuntu.com/manpages/hardy/man8/pam_exec.8.html ) อย่างไรก็ตามหากคุณต้องการดำเนินการที่เฉพาะเจาะจงมากขึ้นในวิธีที่ปลอดภัยอาจมีโมดูล pam พิเศษเพิ่มเติมซึ่งจะทำให้เหมาะสมยิ่งขึ้นเช่น pam_mount ที่ใช้กันทั่วไป (สำหรับการเมานต์เข้าสู่ระบบ - http: //manpages.ubuntu com / manpages / hardy / man8 / pam_mount.8.html ) หรือ pam_echo (สำหรับข้อความที่กำหนดเองถึงผู้ใช้ - http://manpages.ubuntu.com/manpages/hardy/man8/pam_echo.8.html )

โดยทั่วไปแล้ว pam เป็นระบบที่เรียบร้อยมากในการปรับแต่งการเข้าสู่ระบบดังนั้นคุณอาจต้องการค้นหามากกว่านี้แทนที่จะใช้การเขียนสคริปต์ที่อาจไม่ปลอดภัยตามที่คนอื่น ๆ แนะนำ

ตัวอย่าง

ได้รับ /etc/pam.d/system-auth โดยทั่วไปเราสามารถใช้ pam_exec หลังจากลงชื่อเข้าใช้เช่นนี้:

session         optional        pam_ssh.so
session         required        pam_limits.so
session         required        pam_env.so
session         optional        pam_mktemp.so
session         required        pam_unix.so
session         optional        pam_exec.so /usr/local/bin/my_prog
session         optional        pam_permit.so

ที่/usr/local/bin/my_progเป็นโปรแกรมโดยพลการถูกดำเนินการหลังจากที่ประสบความสำเร็จในการเข้าสู่ระบบของผู้ใช้


2
นี่เป็นคำตอบที่ดีแม้ว่าคุณควรมีตัวอย่างของบรรทัดที่คุณจะเพิ่มการpamกำหนดค่าเนื่องจากนี่ไม่ใช่เรื่องเล็กน้อย
แกรม

2

ตามหัวข้อนี้: เรียกใช้คำสั่งอัตโนมัติหลังจากเข้าสู่ระบบ?

คุณมีทางออกของ.bashrc(ไม่ใช่สิ่งที่คุณต้องการ) และวิธีแก้ปัญหาของแอปพลิเคชันเริ่มต้น ฉันอ้าง Daniel S .:

gnome-session-properties สามารถใช้เพื่อกำหนดค่าแอปพลิเคชันเริ่มต้น

นอกจากนี้หากคุณต้องการให้แอปพลิเคชันทำงานเมื่อบูตระบบคุณสามารถเพิ่มกฎต่อไปนี้ใน crontab ของคุณ (แก้ไข crontab ด้วยcrontab -e):

@reboot /run/this/program/at/boot >/dev/null 2>&1
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.