Thao tác với phím X và con trỏ lấy trên dòng lệnh


20

Những công cụ dòng lệnh nào tồn tại để liệt kê và quản lý các máy chủ X lấy? (Đó là lấy trong khóa và lấy con trỏ, tức là hạn chế sử dụng một phím hoặc nút chuột cụ thể cho một ứng dụng cụ thể hoặc hạn chế con trỏ chuột ở trong một khu vực màn hình cụ thể.) Tôi đang tìm kiếm một xgrabtiện ích giả định có thể hiển thị những thứ như

Key     0x00f00ba5  0x123   0
Button  0x00f00ba5  2       
Pointer 0x00abcdef  

có nghĩa rằng đã có một cuộc gọi đến XGrabKey(display, 0x123, 0, 0x00f00ba5, ...)và như vậy với XGrabButton, XGrabPointer, XGrabKeyboard, XGrabServer(nếu có thể). Định dạng hiển thị không thành vấn đề, điều tôi muốn là một cách nào đó để xem ai đang chộp lấy cái gì và có thể là cách nào đó để thu hồi những cái nắm bắt này (nếu có thể, tôi không chắc API X11 có cho phép điều đó không).

Câu trả lời:


21

Các phiên bản gần đây của X (máy chủ X.org .111.11) hỗ trợ một số từ khóa gỡ lỗi, được giới thiệu trong cam kết này . Khi được kích hoạt, chúng thực hiện các hành động liên quan đến lấy.

Theo mặc định ( ít nhất là trong các phiên bản gần đây ), chúng bị vô hiệu hóa (vắng mặt trong sơ đồ phím mặc định).

Tuy nhiên, nếu bạn đã xdotoolcài đặt, nó có thể gọi cho họ, bằng cách thực hiện trên dòng lệnh:

xdotool key NameOfKey

đâu NameOfKeylà keyym bạn muốn kích hoạt. Ví dụ: để in danh sách các hoạt động lấy vào nhật ký máy chủ X, hãy sử dụng xdotool key XF86LogGrabInfo.

Các từ khóa liên quan là:

Lưu ý rằng XF86LogGrabInfochỉ liệt kê các lần nắm bắt hoạt động, chứ không phải nắm bắt thụ động, chẳng hạn như nắm lấy một phím hiện không được nhấn. Nếu bạn muốn nhận thông tin về một lần lấy thụ động, bạn cần kích hoạt thao tác lấy: chạy xdotool key XF86LogGrabInfotrong khi tổ hợp phím hoặc nút chuột mà bạn quan tâm được nhấn. Làm một cái gì đó như:

  1. Chạy sleep 1; xdotool key XF86LogGrabInfo
  2. Trong vòng 1 giây, nhấn tổ hợp phím hoặc nút chuột.
  3. Sau 1 giây, nhả phím / nút.
  4. Kiểm tra thông tin của các hoạt động lấy dữ liệu trên nền tảng của Nhật Bản (thường xuyên /var/log/Xorg.0.log).

2
Hiện đang thử nghiệm trên Debian wheezy với Xorg 1.12.4, xdotool key XF86LogGrabInfochỉ kích hoạt hai mục trong nhật ký X: In ấn Tất cả các thiết bị hiện đang hoạt động: ngay lập tức theo sau là Danh sách kết thúc của thiết bị hoạt động. Tuy nhiên, người quản lý cửa sổ của tôi không lấy một loạt các phím. Bạn đã thấy công việc này cho các phím lấy?
Gilles 'SO- đừng trở nên xấu xa'

4
@Gilles - không, bạn sẽ không nhận được bất kỳ đầu ra nào nếu bạn chạy nó như thế ... hãy thử chạy nó sleep 2; xdotool key "XF86LogGrabInfo"và ngay lập tức bắt đầu nhấn một phím (ví dụ: phím "Win"), sau đó bạn sẽ thấy một số đầu ra trong Xorg.log. Hoặc sử dụng xdotoolđể nhấn phím + XF86LogGrabInfocùng một lúc, như ở đây
don_crissti

@don_crissti À, tôi hiểu rồi, XF86LogGrabInfochỉ in thông tin về một phím hiện đang được nhấn? Điều đó giới hạn tính hữu dụng của nó. Tôi muốn liệt kê tất cả các snap - tất cả các snap thụ động, nếu tôi hiểu chính xác thuật ngữ.
Gilles 'SO- ngừng trở nên xấu xa'

Có lẽ có một số cách thông minh để kết hợp điều này với một tìm kiếm toàn diện về các tổ hợp phím, hy vọng không có bàn phím ảo. Chắc chắn ngoài kiến ​​thức của tôi.
Adam Katz

Cảm ơn! Điều này giúp tôi phát hiện ra rằng xfsettingsdđã ăn cắp phím tắt Win+ của tôi L.
Mikel

8

Tôi không biết bất cứ điều gì ngoài tầm tay để lấy thụ động 1 trong một phím hoặc nút có thể có, nhưng có một số cách để liệt kê các thao tác nắm bắt chủ động của toàn bộ thiết bị bàn phím hoặc chuột.

  1. Trên tất cả các nền tảng, nhưng chỉ với Xorg 1.11 trở lên (hoặc phiên bản cũ hơn với bản vá được áp dụng), các phím nóng ánh xạ để đổ dữ liệu lấy vào nhật ký như được mô tả trong các ghi chú vá này .
  2. Trên Solaris 11 (hoặc Solaris 11 Express 2010.11 hoặc phiên bản Solaris 11 thực tế), hãy sử dụng các tập lệnh gỡ lỗi /usr/demo/Xserver/mdb/list_Xserver_devicegrab_client, như được mô tả trong Lấy thông tin từ X Server . Cũng có một cái ở đây để lấy máy chủ, mà các phím nóng Xorg 1.11 hiện không bao gồm.

1 Xem http://tronche.com/gui/x/xlib/input/pulum-grabbing.html để biết định nghĩa của các hoạt động nắm bắt chủ động và thụ động.


4

Đây là một bổ sung cho câu trả lời của ốc cơ khí -

Các mục trong nhật ký Xorg có thể không thể giải mã được. Tôi đã viết một chương trình phân tích chúng và trình bày chúng ở dạng dễ điều khiển:

https://gist.github.com/CyberShadow/6412d11aea64144f8905cc0b8196f38e

Để sử dụng, chạy đầu tiên xdotool key XF86LogGrabInfo, như mô tả trong câu trả lời Cơ ốc của. Sau đó, chạy chương trình liên kết ở trên. Nếu tệp nhật ký Xorg của bạn không được đặt tại /var/log/Xorg.0.log, bạn có thể chỉ định vị trí của nó bằng --xorg-logtùy chọn. Xem --helpđể biết chi tiết.


1
Ý chính được đề cập ở đây được lập trình bằng ngôn ngữ D. Để có được tệp thực thi, người ta có thể cài đặt các gói gdc(trình biên dịch GNU D) và libx11-devsau đó chạy gdc -o xorg-show-grabs xorg-show-grabs.d -lX11.
Stéphane Gourichon
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.