Linux: Làm cách nào để gửi tin nhắn đến người dùng cục bộ đã đăng nhập vào X11?


10

Có thể gửi tin nhắn (cửa sổ bật lên hoặc một cái gì đó) cho người dùng cục bộ đăng nhập vào X (xdm, fluxbox) từ bảng điều khiển? Ví dụ: user1được ghi nhật ký và sử dụng X / fluxbox, user2đăng nhập vào cùng một hộp bằng ssh vào bàn điều khiển. Bây giờ - user2phải làm gì để gửi tin nhắn đến user1?

Câu trả lời:


15

Công xmessagecụ cho phép bạn làm chính xác điều đó; hiển thị một cửa sổ bật lên cho người dùng với một tin nhắn văn bản bên trong.

Ví dụ: user2 đăng nhập vào một phiên BASH trên hộp và các vấn đề:

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

nếu bạn đăng nhập vào một phiên TSCH, nó sẽ giống như thế này:

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

Ngoài ra, bạn có thể gửi tin nhắn đến các phiên cuối theo một trong hai cách:

Sử dụng wall(= cảnh báo tất cả [người dùng])

Từ trang man:
Wall hiển thị nội dung của tệp hoặc theo mặc định, đầu vào tiêu chuẩn của nó, trên các thiết bị đầu cuối của tất cả người dùng hiện đang đăng nhập.

Nếu bạn muốn nhắm mục tiêu một người dùng cụ thể, sử dụng write. Một lần nữa, con người nói với chúng ta:

Tiện ích ghi cho phép bạn giao tiếp với người dùng khác, bằng cách sao chép các dòng từ thiết bị đầu cuối của bạn sang thiết bị của họ.


Nếu một người nhận ( user1trong ví dụ của tôi) đã đăng nhập vào X11 và chưa mở xtermhoặc thiết bị đầu cuối khác - cũng sẽ wallhoạt động? Tôi nghĩ rằng user1sẽ không thấy tin nhắn.
marioosh

Tôi đã cập nhật câu trả lời của mình để bao gồm giải pháp 'xmessage'. Điều đó sẽ hiển thị một cửa sổ nhỏ cho người dùng, bất kể họ có mở thiết bị đầu cuối hay không.
mjk

1
Ngẫu nhiên, 'apropos' là một tiện ích hữu ích cần biết; nó tìm kiếm các trang hướng dẫn cho văn bản bạn chuyển đến nó. Hãy thử chạy 'tin nhắn apropos' và xem những gì nó trả về.
mjk

Tôi biết xmessagenhưng làm thế nào để chạy nó user1và mở cửa sổ nhỏ này trên user2màn hình? thậm chí là có thể?
marioosh

@marioosh Mình cũng muốn biết làm thế nào. Bạn đã bao giờ nhận ra nó?

2

Theo quy định, các phiên X11 thường được bắt đầu ở chế độ riêng tư, vì vậy bạn cần một trong hai điều sau: hoặc là user2cho phép bạn truy cập vào màn hình của họ hoặc các đặc quyền siêu người dùng để phá vỡ màn hình của họ.

NGUY HIỂM: Hãy nhớ rằng, một khi bạn có quyền truy cập vào màn hình của họ, bạn cũng có thể thực hiện những việc như chụp phím (có thể bao gồm cả mật khẩu) và chụp ảnh màn hình, vì vậy đây là một rủi ro bảo mật lớn.

Trong hầu hết các trường hợp, tốt hơn là nên sử dụng một công cụ nhắn tin hoặc chương trình trò chuyện cho những điều này.

Hãy tránh xa:

Hợp tác

Nếu user2muốn cho phép user1truy cập màn hình của họ, thì trước tiên user2phải đưa ra một lệnh như:

 xhost +si:localuser:user1

Điều này có khả năng có thể được thêm vào một kịch bản khởi động của một số loại; Tôi không biết Fluxbox, nhưng tôi cho rằng nó có một rchook hoặc bắt đầu phiên.

Khi điều này đã được thực hiện, user1sau đó có thể ghi vào user2màn hình, nếu họ có thể tìm thấy nó.

Nếu user2nhận thức được điều này, họ luôn có thể gửi nó user1theo một cách khác.

Tìm màn hình của người dùng khác

Trên một máy trạm thông thường, việc có nhiều hơn một hoặc hai người dùng đăng nhập; trong trường hợp đó, hãy đoán rằng, màn hình bạn muốn là 0, 1 hoặc có thể là 2 có thể là một giải pháp khả thi.

Tuy nhiên, để có giải pháp hoàn chỉnh hơn, hãy giả sử rằng bạn có một máy có rất nhiều người dùng có thể đăng nhập và cố gắng tìm máy bạn muốn.

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

sau đó, user1cuối cùng cũng có thể (sử dụng giá trị HIỂN THỊ thu được ở trên; tôi vừa mới viết :14.0ở đây)

DISPLAY=:14.0 xmessage "Hello, user2"

Gửi một thông báo thay thế

Vì lợi ích của sự hoàn thiện, ít nhất các công việc sau đây trên máy tính để bàn Gnome. Tôi không biết nếu Fluxbox có tiện ích thông báo.

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

Điều này có nhiều tùy chọn thân thiện hơn với người dùng để hiển thị và có thể sẽ bật lên theo cách khá thân thiện hơn trên màn hình của người dùng.


for subproc ingì? Tôi nghĩ rằng kịch bản của bạn bị hỏng ở đây.
Stéphane
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.