Linux: วิธีส่งข้อความไปยังผู้ใช้ภายในที่ลงชื่อเข้าใช้ X11 อย่างไร


10

เป็นไปได้ที่จะส่งข้อความ (หน้าต่างป๊อปอัพหรือบางสิ่งบางอย่าง) ให้กับผู้ใช้ท้องถิ่นเข้าสู่ระบบ X (xdm, fluxbox) จากคอนโซล? ตัวอย่างเช่น: user1เข้าสู่ระบบและใช้ X / fluxbox user2เข้าสู่กล่องเดียวกันโดย ssh to console ตอนนี้ - สิ่งที่user2ต้องทำเพื่อส่งข้อความถึงuser1?

คำตอบ:


15

xmessageเครื่องมือที่ช่วยให้คุณสามารถทำตรงนั้น; แสดงหน้าต่างป๊อปอัพให้กับผู้ใช้ที่มีข้อความอยู่ข้างใน

ตัวอย่าง: user2 ล็อกอินเข้าสู่เซสชัน BASH บนกล่องและปัญหา:

export DISPLAY=':0.0'
xmessage "some message here"

หากคุณเข้าสู่เซสชัน TSCH มันจะเป็นดังนี้:

setenv DISPLAY ':0.0'
xmessage "some message here'

หรือคุณสามารถส่งข้อความไปยังเซสชันเทอร์มินัลด้วยหนึ่งในสองวิธี:

การใช้wall(= เตือนผู้ใช้ทั้งหมด []]

จากหน้า man:
Wall จะแสดงเนื้อหาของไฟล์หรือตามค่าเริ่มต้นคืออินพุตมาตรฐานที่เทอร์มินัลของผู้ใช้ทั้งหมดที่ล็อกอินอยู่ในปัจจุบัน

writeหากคุณต้องการที่จะกำหนดเป้าหมายผู้ใช้เฉพาะการใช้งาน อีกครั้งมนุษย์บอกเรา:

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


หากผู้รับ ( user1ในตัวอย่างของฉัน) เข้าสู่ระบบ X11 และยังไม่ได้เปิดxtermหรือเทอร์มินัลอื่น - จะwallทำงานด้วยหรือไม่ ฉันคิดว่าuser1จะไม่เห็นข้อความ
marioosh

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

1
อนึ่ง 'apropos' เป็นประโยชน์ที่ควรทราบ มันค้นหาหน้าคู่มือสำหรับข้อความที่คุณส่งไป ลองเรียกใช้ 'apropos message' แล้วดูว่ามันจะกลับมาเป็นอย่างไร
mjk

ฉันรู้xmessageแต่จะเปิดใช้งานuser1และเปิดหน้าต่างเล็ก ๆ นี้บนuser2หน้าจอของได้อย่างไร เป็นไปได้ไหม
marioosh

@marioosh ฉันต้องการทราบวิธีการทำเช่นนั้น คุณเคยคิดออกไหม

2

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

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

ในกรณีส่วนใหญ่ควรใช้เครื่องมือส่งข้อความหรือโปรแกรมแชทแทนสิ่งเหล่านี้แทน

คำเตือน:

ความร่วมมือ

หากuser2ต้องการอนุญาตให้user1เข้าถึงหน้าจอของพวกเขาก่อนอื่นuser2ต้องออกคำสั่งเช่น:

 xhost +si:localuser:user1

สิ่งนี้อาจถูกเพิ่มเข้าไปในสคริปต์เริ่มต้นบางชนิด; ฉันไม่รู้จัก Fluxbox แต่ฉันคิดว่ามันมีrcตะขอเริ่มหรือเซสชัน

เมื่อสิ่งนี้ได้รับการเผยแพร่user1แล้วสามารถเขียนไปยังuser2จอแสดงผลของหากพวกเขาสามารถหาได้

หากuser2ตระหนักถึงสิ่งนี้พวกเขาสามารถส่งไปยังuser1วิธีอื่นได้เสมอ

การค้นหาดิสเพลย์ของผู้ใช้รายอื่น

บนเวิร์กสเตชันทั่วไปเป็นเรื่องปกติที่จะมีผู้ใช้มากกว่าหนึ่งหรือสองคนเข้าสู่ระบบ ในกรณีนี้ "คาดเดา" ว่าจอแสดงผลที่คุณต้องการคือ 0, 1 หรืออาจเป็น 2 อาจเป็นวิธีแก้ปัญหาที่ใช้การได้

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

for proc in /proc/[0-9]*/
do
     if [ Xorg = $(< $proc/comm ) ] 2>/dev/null && \
        [ $(id -u user2) -eq $(< $proc/loginuid) ] 2>/dev/null
     then
        for subproc in $(
        do
            echo "user2 display=" $(perl -ne 'if (m,DISPLAY=(.*)\0,) { print $1 }' < $subproc/environ)
        done
     fi
done

จากนั้นuser1ในที่สุดก็สามารถ (ใช้ค่า DISPLAY ที่ได้รับด้านบน; ฉันเพิ่งเขียน:14.0ที่นี่ ... )

DISPLAY=:14.0 xmessage "Hello, user2"

ส่งการแจ้งเตือนแทน

เพื่อผลประโยชน์ของความสมบูรณ์, อย่างน้อยงานต่อไปนี้บนเดสก์ท็อป Gnome ฉันไม่รู้ว่า Fluxbox มีวิดเจ็ตการแจ้งเตือนหรือไม่

 DISPLAY=:14.0 notify-send "Hello, user2"

นี่เป็นตัวเลือกที่ใช้งานง่ายมากสำหรับการแสดงผลและอาจปรากฏขึ้นในลักษณะที่ค่อนข้างเป็นมิตรบนหน้าจอของผู้ใช้


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