ฉันจะรันสคริปต์บน Unity login / logout ได้อย่างไร


8

ฉันมีสองสคริปต์ - หนึ่งเพื่อเมานต์บางโฟลเดอร์ผ่าน SSHFS - และหนึ่งเพื่อยกเลิกการต่อเชื่อม

ฉันต้องการเปิดตัวเมานต์สคริปต์เมื่อเดสก์ท็อปเริ่มต้นของ Ubuntu เริ่มทำงาน (หลังจากฉันเข้าสู่ระบบที่คอนโซลกราฟิก) - และสคริปต์เลิกเมานท์เมื่อฉัน "ออกจากระบบ ... " จากฟันเฟืองล้อที่ด้านบนขวาของ เดสก์ท็อป

ได้โปรดบอกใครสักคนว่าจะทำสิ่งนี้ได้อย่างไร? ตะขอ / มาตรฐานที่สะดวกที่สุดในการเรียกใช้คำสั่งเมื่อเปิด / ออกจากเดสก์ท็อปคืออะไร


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

ฉันมีสิทธิ์เข้าถึงรูท การติดตั้งแพ็คเกจไม่มีปัญหา ถ้าเป็นไปได้ฉันต้องการใช้สิทธิ์ระดับผู้ใช้เท่านั้นโดยสมมติว่ามีวิธีที่เป็นระเบียบในการทำเช่นนั้น สคริปต์ของฉันไม่ต้องการรูท ฉันกำลังมองหาคำแนะนำเกี่ยวกับวิธีที่ดีที่สุดในการเริ่มต้นสคริปต์ของฉันใน Unity start / stop ... ประสบการณ์ Linux / Unix ของฉันส่วนใหญ่อยู่ในบริบทที่ไม่ใช่ GUI ด้วย XWindows โรงเรียนเก่าและผู้จัดการหน้าต่างวานิลลาฉันสามารถทำสิ่งนี้ได้จาก. xinitrc เป็นวิธีที่ดีที่สุดด้วยเดสก์ท็อปที่ทันสมัยค่าเริ่มต้น Unity คืออะไร
aSteve

ฉันไม่ต้องการให้การดำเนินการออกจากระบบขึ้นอยู่กับสิ่งที่ / ไม่ได้ติดตั้ง ... นั่นคือทั้งหมดที่จัดการแบบไดนามิกโดยสคริปต์ที่มีอยู่ สิ่งที่ฉันต้องการคือวิธีที่ประณีตในการรันสคริปต์ตัวแรกในการเข้าสู่ระบบและอีกวิธีในการออกจากระบบสำหรับเซสชัน GUI บนคอนโซล ฉันพบ "แอปพลิเคชันเริ่มต้น" - แต่นั่นจะแก้ปัญหาช่วงครึ่งแรกเท่านั้น
aSteve

ฉันไม่คิดว่า "แอปพลิเคชันเข้าสู่ระบบ" เป็นกลยุทธ์ที่เหมาะสมสำหรับสคริปต์อย่างใดอย่างหนึ่ง ฉันมีสองสคริปท์ ... ตัวหนึ่งตั้งค่าไว้สำหรับเซสชัน GUI ล้างอีกหลังจากเซสชัน GUI ทั้งสองควรถูกเรียกใช้เป็นผู้ใช้เดียวกันกับเซสชัน GUI ไม่จำเป็นต้องมีข้อโต้แย้งใด ๆ ฉันต้องการค้นหาวิธีที่เหมาะสมในการเปิดตัวสคริปต์ - ในเวลาที่เหมาะสมนั่นคือทั้งหมด ไม่มีสมมติฐานเกี่ยวกับสิ่งที่สคริปต์ควรทำจริง ๆ คำถามนี้เกี่ยวกับวิธีเชื่อมโยงเหตุการณ์ที่เกิดขึ้นพร้อมกันกับการเข้าสู่ระบบแบบ Unity และการออกจากระบบ
aSteve

คำตอบ:


9

เมื่อพิจารณาจากความต้องการของคุณของการใช้งานเมื่อคุณเข้าสู่ระบบเพื่อความสามัคคีและไม่ได้สำหรับการเข้าสู่ระบบอื่น ๆ พุ่งพรวดงานเซสชั่นดูเหมือนว่าสมบูรณ์แบบ

คุณอาจสังเกตเห็นว่า: กระบวนการที่คุณทำงานหลังจากเข้าสู่ระบบ GUI อยู่ภายใต้initกระบวนการที่สอง นี่initคือการเริ่มต้นพุ่งพรวดที่เหมาะสมและคุณสามารถเริ่มและหยุดงานเซสชันตามเหตุการณ์ที่ปล่อยออกมา ไม่จำเป็นต้องใช้สิทธิ์รูทเลย ยังดีกว่า (หรือแย่กว่านั้นขึ้นอยู่กับมุมมอง) สิ่งนี้ยังไม่รองรับระบบหัวขาดอย่างสมบูรณ์ การเข้าสู่ระบบ SSH ไม่ได้เริ่มต้นผู้ใช้ init จากการทดสอบอย่างรวดเร็วที่ฉันทำตอนนี้

เพื่อสร้างงานเซสชั่นให้ใหม่แฟ้มใน.conf ~/.config/upstartนี่คือไดเรกทอรีหลักเริ่มต้นสำหรับงานเซสชันพุ่งพรวด ( $XDG_CONFIG_HOME/upstart) สร้างหากไม่มีอยู่ นี่คือตัวอย่างงาน:

tee ~/.config/upstart/myjob.conf <<EOF
description "My job"
start on desktop-start
stop on desktop-end

script 
       firefox 'http://upstart.ubuntu.com/cookbook/#session-job'
end script
EOF

คุณสามารถควบคุมมันด้วยตนเอง:

start myjob 
# or
initctl start myjob

serviceคำสั่งที่ใช้ในการควบคุมงานระบบ (ผู้ที่อยู่ใน/etc/init.dหรือ/etc/init) สำหรับการควบคุมงานเซสชันหนึ่งต้องใช้initctlคำสั่งซึ่งใช้ในการโต้ตอบกับพุ่งพรวด

ดูman upstart-eventsกิจกรรมเพิ่มเติมที่คุณสามารถใช้ได้


ฉันไม่ได้สังเกต ... แต่ ... ฉันเห็นด้วย - งานเซสชันพุ่งพรวดดูสมบูรณ์แบบ ฉันอาจจะขาดอะไรบางอย่างที่ชัดเจน ... แต่มีการสร้าง ~ / .config / upstart / myjob.conf (ดังกล่าวข้างต้น) เมื่อฉันเรียกใช้ "บริการ myjob เริ่ม" ฉันได้รับ "myjob: บริการที่ไม่รู้จัก" แนวคิดใด?
aSteve

แก้ไขได้: ฉันต้องการใช้ "start myjob" แทน "service myjob start" คำสั่งที่มีประโยชน์อีกอย่างคือ "รายการ initctl"
aSteve

@aSteve ขอโทษด้วย ฉันแก้ไขให้ถูกต้องแล้ว
muru

ไม่มีปัญหา. วิธีการพุ่งพรวด / การประชุมมีลักษณะที่ถูกต้องแน่นอน ที่กล่าวว่าฉันยังไม่ได้ระบุวิธีที่ดีที่สุดที่จะใช้ในการรันสคริปต์เริ่มต้นและหยุดแบบแยก (สั้น) ฉันสามารถใช้ไฟล์ .conf เพียง 1 ไฟล์หรือต้องการ 2 ได้หรือไม่ มันควรจะเป็น "บริการ" หรือ "งาน"? ฉันควรใช้ pre / post start และ pre / post stop หรือไม่ ฉันไม่ต้องการ / ต้องการให้กระบวนการทำงานระหว่างการเริ่มต้นและหยุด ... เว้นแต่ฉันเดาว่ามีวิธีที่ง่ายในการวางไอคอนในแถบเครื่องมือ ... แม้ว่านั่นอาจจะเป็น overkill - สำหรับวัตถุประสงค์ของฉัน
aSteve

1
ในที่สุด หลังจากแฮ็คมาก ... ฉันค้นพบว่าฉันต้องการ myendtask ที่จะถูกไล่ออก สิ่งนี้ค่อนข้างตอบโต้ได้ง่าย แต่ใช้งานได้ (ในที่สุด!)
aSteve

1

การแก้ปัญหาคือการใช้งานพุ่งพรวด ฉันต้องการสองภารกิจ - หนึ่งถูกไล่ออกเมื่อเดสก์ท็อปเริ่มต้นสำหรับผู้ใช้; วินาทีเมื่อเซสชันผู้ใช้หมดอายุ สคริปต์สองตัวต่อไปนี้ใช้ได้กับฉันใน Ubuntu 14.04

ใน ~ / .config / upstart / desktopOpen.conf

description "Desktop Open Task"
start on desktop-start
task
script
# Commands to mount sshfs go here as shell-script.
end script

ใน ~ / .config / upstart / desktopClose.conf

description "Desktop Close Task"
start on session-end
task
script
# Commands to unmount sshfs go here as shell-script.
end script

นิ้วมือของฉันถูกข้ามว่าเหตุการณ์เหล่านี้จะยังคงตอบสนองความต้องการใน Ubuntu รุ่นต่อไปในอนาคต ฉันคิดว่ามันคุ้มค่าที่จะโพสต์โซลูชันของฉันที่นี่ - ในกรณีที่มีการใช้กับผู้อื่น


-1

นี่คือคำแนะนำสำหรับการเรียกใช้สคริปต์หลังจากเข้าสู่ระบบ:

สคริปต์ StackOverflow Linux หลังจาก bootup : Cliff notes คือการใส่ไฟล์ * .sh ของคุณใน /etc/profile.d

หากคุณต้องการเรียกใช้สคริปต์เมื่อบูตเครื่องนี่คือคำแนะนำสำหรับสิ่งต่อไปนี้:

สคริปต์ StackOverflow Linux หลังจากบูต : Cliff notes คือการใช้ /etc/rc.local หรือ crontab


1
ตัวเลือกเหล่านั้นไม่ได้ดู 'ถูกต้อง' ฉันต้องการรันสคริปต์เฉพาะเมื่อฉันเข้าสู่ระบบ / ปิดในแง่ของการเริ่มต้น / สิ้นสุดเซสชั่นความสามัคคี ฉันไม่ต้องการเรียกใช้สคริปต์ทุกครั้งที่มีการเข้าสู่ระบบใหม่ การเข้าสู่ระบบใหม่อาจเริ่มต้นจากระยะไกลผ่าน ssh ฯลฯ - แต่ฉันไม่ต้องการให้สิ่งเหล่านี้เพื่อรันสคริปต์เนื่องจากไม่ได้เริ่มเซสชัน Unity ใหม่ (บนคอนโซล)
aSteve
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.