Làm thế nào để tìm ra ai đang sử dụng bàn điều khiển vật lý?


10

Tôi muốn sử dụng tập lệnh để tìm tên người dùng - của người dùng hiện đang ở trên bảng điều khiển vật lý (người có lệnh của bàn phím, chuột và màn hình đồ họa)?

Tôi không chỉ muốn biết ai chạy X (vì bảng điều khiển hiện tại có thể được chuyển sang thiết bị đầu cuối khác và người dùng khác).


Để làm rõ:
Các lệnh như w, whovv hiển thị ai đã đăng nhập tại thiết bị đầu cuối nào. Cái này đơn giản. Tuy nhiên, tôi muốn biết, người hiện đang sở hữu bảng điều khiển vật lý (màn hình, bàn phím, v.v.). Ví dụ: nếu hai người dùng chạy màn hình: 0 và: 1 và tôi có thể chuyển đổi giữa các màn hình bằng ctrl+ alt+ 7ctrl+ alt+ 8, tôi muốn biết người dùng nào hiện có kết nối giữa màn hình của họ và màn hình thực tế .


Thêm một điều rõ ràng nữa:
Tôi không muốn biết tên người dùng của mình . Tôi có một tập lệnh, chạy như một người dùng hoặc root khác, cần biết ai sử dụng màn hình vật lý . Có thể có một vài phiên X được chạy bởi những người dùng khác nhau, một số trong số họ được ảo hóa, một số trong số họ được kết nối với máy chủ X từ xa, nhưng tôi chỉ quan tâm đến phiên thực sự hiển thị đầu ra trên màn hình.


Một điều rõ ràng khác:
Dù lệnh là gì, đầu ra phải khác sau khi nhấn Ctrl+ Alt+ F1(chuyển sang bảng điều khiển ảo khác).


Đây có phải là một Q & A tự?
jokerdino

Không, thật không may.
tháng 1

Câu trả lời:


6

Tôi e rằng tôi không thể cho bạn một câu trả lời cụ thể (vì tôi không biết rõ về công nghệ), nhưng tôi tin rằng bạn có thể tìm ra nó bằng D-Bus và ConsoleKit.

Ví dụ: khi tôi chuyển từ X sang VT và quay lại, tôi sẽ nghe bài này dbus-monitor:

$ dbus-monitor --system | grep ConsoleKit
signal sender=:1.16 -> dest=(null destination) serial=19039 path=/org/freedesktop/ConsoleKit/Session2; interface=org.freedesktop.ConsoleKit.Session; member=ActiveChanged
signal sender=:1.16 -> dest=(null destination) serial=19040 path=/org/freedesktop/ConsoleKit/Seat1; interface=org.freedesktop.ConsoleKit.Seat; member=ActiveSessionChanged
signal sender=:1.16 -> dest=(null destination) serial=19041 path=/org/freedesktop/ConsoleKit/Session2; interface=org.freedesktop.ConsoleKit.Session; member=ActiveChanged
signal sender=:1.16 -> dest=(null destination) serial=19042 path=/org/freedesktop/ConsoleKit/Seat1; interface=org.freedesktop.ConsoleKit.Seat; member=ActiveSessionChanged
   string "/org/freedesktop/ConsoleKit/Session2"

Cụ thể, bạn có thể sử dụng phương thức GetActiveSession . Đây là cách với dbus-send(có thể yêu cầu sudo):

$ dbus-send --system --type=method_call --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Seat1 org.freedesktop.ConsoleKit.Seat.GetActiveSession

Sau đó, tùy thuộc vào ứng dụng của bạn, bạn sẽ muốn kiểm tra các thuộc tính của đối tượng được trả về, đây sẽ là đường dẫn đối tượng đến Phiên .


3
Rất hữu ích, tôi nghĩ vậy. Khi tôi chuyển phiên, công tắc trả lời tương ứng. Cụ thể sau đó tôi có thể nhập lệnh sau: dbus-send --system --type=method_call --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Session2 org.freedesktop.ConsoleKit.Session.GetUsertrả lời với id người dùng hiện tại. Từ đó chức năng thư viện getpwuid có thể lấy tên người dùng.
John S Gruber

1
Đây chắc chắn là câu trả lời tôi đang tìm kiếm. Cảm ơn rât nhiều!
tháng 1

5
[geek@atremis ~]$ w

 20:02:02 up 2 days,  8:37,  3 users,  load average: 0.00, 0.01, 0.00

USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT

geek     tty1     :0               Thu11    2days 35.11s  0.18s pam: gdm-passwo

geek     pts/0    athena           Fri22   21:04m  0.03s  0.03s -bash

geek     pts/1    blackbeauty      20:02    0.00s  0.14s  0.10s w

[geek@atremis ~]$

Bạn có thể sử dụng lệnh w để xem ai đã đăng nhập. Thời gian nhàn rỗi và những gì sẽ cho bạn biết những gì đang được chạy - trong trường hợp này gdm chỉ ra một đăng nhập hoạt động và thời gian nhàn rỗi cho thấy người dùng đã không ở trong hệ thống trong 2 ngày. Tương phản điều này với thông tin đăng nhập từ blackbeauty, có thời gian nhàn rỗi 0,00, cho biết nó đang được sử dụng.


Không, điều này chỉ cho tôi biết - như bạn đã viết - ai đã đăng nhập tại thiết bị đầu cuối nào . Để sử dụng với tập lệnh, tôi muốn biết người dùng nào đang sở hữu bảng điều khiển vật lý (bàn phím, màn hình, v.v.)
ngày

Thời gian nhàn rỗi PS cũng không có thông tin; Tôi đang làm việc với một kịch bản xử lý với trình bảo vệ màn hình, nhưng tôi muốn biết người dùng nào đang chạy trình bảo vệ màn hình thực sự được hiển thị .
tháng

TTY và 'những gì' có thể hoạt động ở đây, bạn chỉ cần trích xuất các bit cần thiết.
Journeyman Geek

Ừm, không, bởi vì nó có thể chạy ở bất cứ đâu (trong nền, trên một máy chủ X khác, trong một máy ảo)
ngày


0

Một lệnh khác là

whoami

Nó hiển thị tên người dùng logeed hiện tại

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.