มีวิธีให้ข้อความวอลล์แสดงต่อผู้ใช้เดสก์ท็อปหรือไม่


9

สมมติว่าฉันไม่อยู่บ้านแล้วกำลังนั่งบนคอมพิวเตอร์ที่บ้าน ด้วยเหตุผลใดก็ตามฉันต้องการมันรีบูต

# shutdown -r +10

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

มีวิธีใดบ้างที่wallข้อความสามารถเข้าถึงเดสก์ท็อปผ่านพูดแจ้ง


1
ขอบคุณข้อมูลในคำตอบของโพสต์นี้ฉันสามารถแฮ็คโปรแกรม Python ร่วมกันที่ทำสิ่งที่ฉันต้องการ ขึ้นอยู่กับlibnotify-binแพ็คเกจ
badp

คำตอบ:


8

internals ของwallและถูกปิดกั้นดังนั้นและโบราณว่าไม่มีทางที่จะดึงข้อความจากมันเมื่อมันอยู่ในนั้น

ความคิดที่แท้จริงเพียงข้อเดียวสำหรับปัญหานี้ ( มีการพูดถึงปัญหามาก่อนแล้วหลายครั้ง) คือการเปลี่ยนแปลงshutdownและrebootสคริปต์เพื่อให้สามารถใช้งานบางอย่างผ่านทาง dbus หรือ (เนื่องจากเราจัดการกับคอมพิวเตอร์เพียงเครื่องเดียวและแก้ไขได้) เพียงแค่ให้มันส่งข้อความแจ้งเตือน - ส่ง

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

ผมไม่เคยได้ยินgxmessageมาก่อน notify-sendแต่ผมจะใช้

โซลูชันเต็มรูปแบบจำเป็นต้องรองรับความเป็นไปได้ของการแสดงผลหลายจอ (เช่นหลายหัวผู้ใช้ระยะไกล ฯลฯ ) แต่โชคดีที่ฉันเขียนโค้ดสำหรับบิตนั้นเมื่อวานนี้:

for display in `ps aux | grep -oE "/usr/bin/X\s[^ ]+" | cut -d " " -f 2`; do
    DISPLAY=$display notify-send -u critical 'Shutdown notice' 'Save all your work. THE SYSTEM IS GOING DOWN!!' -i /usr/share/pixmaps/gnome-computer.png
done

(ฉันใช้การส่งออกแทนธง-displayหรือ--displayเพราะฉันไม่ทราบว่าnotify-sendจะใช้เวลาอย่างใดอย่างหนึ่ง)


gxmessage เป็นแอปโบราณ ลองนึกถึง dbus และการแจ้งเตือนการส่งเป็นตัวเลือกที่ดีกว่ามาก บางทีฉันสามารถทำอะไรบางอย่างด้วยความเป็นเซน
tinhed

ใช่ฉันไม่แน่ใจว่าสิ่งที่ดีที่สุด zenityคำเตือนอาจสร้างความรำคาญหากคุณกำลังแย่งชิงเพื่อรับสิ่งที่บันทึกไว้ก่อนที่คุณจะออกจากระบบ ... แต่การnotify-sendแจ้งเตือนอาจถูกเพิกเฉย
Oli

1
เป็นความจริงที่ว่าการแจ้งเตือนการส่งการแจ้งเตือนสามารถเพิกเฉยได้ แต่หากปรากฏขึ้นสองสามครั้ง (เช่น 10 นาที) พวกเขาอาจทำงานได้!
OpenNingia

@Oli ฉันพบว่าคุณต้องการตัวแปรสภาพแวดล้อม XAUTHORITY ที่ตั้งค่าไว้อย่างถูกต้องเพื่อให้ทำงานได้
badp

1
DISPLAY=$display notify-send...จะส่งออกเฉพาะค่า DISPLAY สำหรับคำสั่งนั้นเท่านั้น ไม่ใช่ว่ามันสำคัญที่นี่ แต่มีประโยชน์ในที่อื่นและ IMHO สะอาดกว่าเล็กน้อย

2

คุณสามารถส่งข้อความด้วยตนเองโดยใช้ zenity

zenity --warning --text "badp's about to restart the computer" --display=:0

แน่นอนคุณสามารถรวมสิ่งนี้ไว้ในสคริปต์ได้


ฉันไม่สามารถเปิดจอแสดงผลแม้จะเป็น superuser (ฉันต้อง sudo เป็นผู้ใช้ที่ถูกต้อง) :(
badp

น่าจะแน่ใจได้ว่าคุณมีลำไส้ใหญ่อยู่ในนั้น ( =:0ไม่ใช่=0)
มิสเตอร์เบ็น

ทำไม่ได้คุณต้องตั้งค่าตัวแปรสภาพแวดล้อม XAUTHORITY อย่างถูกต้อง
badp

1

คุณควรจะสามารถเขียนสคริปต์ที่สร้าง ptty และฟังข้อความที่เป็นลายลักษณ์อักษร (จากการเขียนหรือวอลล์) จากนั้นส่งต่อไปยังเอาต์พุต GUI


0

AFAIK ไม่มีไคลเอ็นต์ X สำหรับคำสั่ง wall เพื่อแสดงข้อความเหล่านี้ในสภาพแวดล้อมแบบกราฟิก คุณสามารถใช้แอพgxmessageเพื่อแสดงป๊อปอัป แต่คุณจะต้องเขียนสคริปต์ด้วยตัวเอง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.