2017-08-02 15 views
25

Bối cảnh: Tôi đang làm việc trên một phần mềm có tên ActivityWatch ghi lại những gì bạn thực hiện trên máy tính của mình. Về cơ bản một nỗ lực giải quyết một số vấn đề với: RescueTime, selfspy, arbtt, v.v.Làm cách nào để có cửa sổ hoạt động trên Gnome Wayland?

Một trong những điều cốt lõi chúng tôi làm là ghi lại thông tin về cửa sổ hiện hoạt (lớp và tiêu đề). Trong quá khứ, điều này đã được thực hiện bằng cách sử dụng trên Linux bằng cách sử dụng xprop và bây giờ python-xlib mà không có vấn đề.

Nhưng bây giờ chúng tôi gặp sự cố: Wayland đang tăng lên và theo như tôi thấy Wayland không có khái niệm về cửa sổ đang hoạt động. Vì vậy, nỗi sợ của tôi là chúng tôi sẽ phải thực hiện hỗ trợ cho từng môi trường máy tính để bàn có sẵn cho Wayland (giả sử họ sẽ cung cấp khả năng nhận thông tin về cửa sổ đang hoạt động).

Hy vọng rằng cuối cùng họ sẽ hội tụ và có một số giao diện chung cho có được điều này được thực hiện, nhưng tôi không giữ hơi thở của tôi ...

Tôi đã anticipating this issue. Nhưng hôm nay chúng tôi đã nhận được first user request for Wayland support bởi một người dùng Wayland thực tế. Khi các bản phân phối lớn hơn áp dụng Wayland làm giao thức máy chủ hiển thị mặc định (Fedora 25 đã sử dụng nó, Ubuntu sẽ chuyển sang phiên bản 17.10 sắp tới) tình hình sẽ trở nên nghiêm trọng hơn theo thời gian.

các vấn đề có liên quan cho ActivityWatch:

có các ứng dụng khác như ActivityWatch rằng sẽ yêu cầu các chức năng tương tự (RescueTime, arbtt, selfspy, vv), họ dường như không hỗ trợ Wayland ngay bây giờ và tôi không thể tìm thấy bất kỳ chi tiết nào về việc họ có kế hoạch làm như vậy.

Tôi hiện đang quan tâm đến việc triển khai hỗ trợ cho Gnome để bắt đầu với và theo dõi những người khác khi đường dẫn trở nên rõ ràng hơn.

Một câu hỏi tương tự liên quan đến Weston đã được yêu cầu ở đây: get the list of active windows in wayland weston

Edit: Tôi hỏi trong #wayland trên freenode, đã trả lời như sau:

15:20:44 ErikBjare Hello everybody. I'm working on a piece of self-tracking software called ActivityWatch (https://github.com/ActivityWatch/activitywatch). I know this isn't exactly the right place to ask, but I was wondering if anyone knew anything about getting the active window in any Wayland-using DE. 
15:20:57 ErikBjare Created a question on SO: https://stackoverflow.com/questions/45465016/how-do-i-get-the-active-window-on-gnome-wayland 
15:21:25 ErikBjare Here's the issue in my repo for it: https://github.com/ActivityWatch/activitywatch/issues/92 
15:22:54 ErikBjare There are a bunch of other applications that depend on it (RescueTime, selfspy, arbtt, ulogme, etc.) so they'd need it as well 
15:24:23 blocage  ErikBjare, in the core protocol you cannot know which windnow has the keyboard or cursor focus 
15:24:39 blocage  ErikBjare, in the wayland core protocol * 
15:25:10 blocage  ErikBjare, you can just know if your window has the focus or not, it a design choise 
15:25:23 blocage  avoid client spying each other 
15:25:25 ErikBjare blocage: I'm aware, that's my reason for concern. I'm not saying it should be included or anything, but as it looks now every DE would need to implement it themselves if these kind of applications are to be supported 
15:25:46 ErikBjare So wondering if anyone knew the teams working with Wayland on Gnome for example 
15:26:11 ErikBjare But thanks for confirming 
15:26:29 blocage  ErikBjare, DE should create a custom extension, or use D-bus or other IPC 
15:27:31 blocage  ErikBjare, I guess some compositor are around here, but I do not know myself if there is such extension already 
15:27:44 blocage  compositor developers * 
15:28:36 ErikBjare I don't think there is (I've done quite a bit of searching), so I guess I need to catch the attention of some DE developers 
15:29:16 ErikBjare Thanks a lot though 
15:29:42 ErikBjare blocage: Would you mind if I shared logs of our conversation in the issue?          
15:30:05 blocage  just use it :) it's public                        
15:30:19 ErikBjare ty :) 

Chỉnh sửa 2: Filed một enhancement issue in the Gnome bugtracker.

tl; dr: Làm cách nào để có cửa sổ hoạt động trên Gnome khi sử dụng Wayland?

Trả lời

-1

Tôi có một tập lệnh được gọi là preguiça.py, thực hiện chính xác những gì bạn đang làm, mặc dù nó có thể đơn giản hơn rất nhiều và tôi chưa phát hành nó.

Đối với tập lệnh của mình, tôi đã mua được tiêu đề cửa sổ bằng cách sử dụng Bộ công cụ điều hướng cửa sổ của PyGObject (Wnck).

Dưới đây là một phiên bản đơn giản của nó, với các bộ phận essencial:

from gi.repository import Wnck 
from gi.repository import GObject 

def changed (screen, window, data): 
    print ("Changed!") 
# window = screen.get_active_window() 
    if window: 
     print ("Title: %s" % window.get_name()) 

screen = Wnck.Screen.get_default() 
screen.connect ("active-window-changed", changed, None) 

mainLoop = GObject.MainLoop() 

try: 
    mainLoop.run() 
except KeyboardInterrupt: 
    print ("Hey") 

mainLoop.unref() 

Mã thực tế cho những gì bạn đang yêu cầu được thực sự nhận xét trên ví dụ trên (tôi không cần phải nắm bắt các cửa sổ , như gọi lại đã nhận được nó), nhưng bạn có thể cần nó tùy thuộc vào việc thực hiện của bạn.

Tôi đã viết nó cho X, và nó không phàn nàn khi tôi chuyển sang Wayland, vì vậy nó có lẽ nên làm việc cho bạn.

Lưu ý rằng nó không nhận được thông tin từ Wayland, như bạn đã hỏi, nhưng có thể thực sự tốt hơn, vì nó sẽ là X/Wayland-thuyết bất khả tri. Nó có tiêu đề từ một xterm tôi mở ra, vì vậy nó phải là bộ công cụ bất khả tri, là tốt.

Đừng hỏi tôi chi tiết về việc triển khai. Mã này ít nhất là bốn tuổi :)

+3

Thoạt nhìn, điều này có vẻ tốt. Tôi không thể kiểm tra điều này ngay bây giờ nhưng theo [tài liệu trên 'screen_get_default'] (https://developer.gnome.org/libwnck/stable/WnckScreen.html#wnck-screen-get-default):" Điều này có thể trả về NULL nếu không có trên X11. " Tôi đang kiềm chế sự lạc quan của mình bây giờ ... – erb

+1

Đây là cảnh báo mà 'Wnck.Screen.get_default()' cho: '(.: 9342): Wnck-CẢNH BÁO **: libwnck được thiết kế để hoạt động chỉ trong X11 , không tìm thấy hiển thị hợp lệ' – sebix

2

Theo ý kiến ​​của tôi choise tốt nhất bạn có không phải là Wayland hoặc bất kỳ thư viện có sẵn (không có một). Trên thực tế những người biết trong gnome-wayland về các cửa sổ đang hoạt động là Mutter, vì vậy bạn cần phải tìm một cách để yêu cầu Mutter cửa sổ đang hoạt động. Gnome có thể develp một API để nội bộ yêu cầu lẩm bẩm các cửa sổ đang hoạt động và khôi phục lại funcionality. Nhưng thực sự, bạn không phải là nơi để yêu cầu. Mutter sẽ không phát triển một API để truy cập vào đại diện nội bộ của mình, bởi vì điều này sẽ khá cụ thể của Mutter chỉ và không cho tất cả các quản lý cửa sổ Wayland. Vì vậy, điều này cần phải được thêm vào một thư viện bên ngoài, nơi mà thư viện này có thể nói chuyện với trình quản lý cửa sổ hiện tại mà thư viện đang sử dụng để giải quyết yêu cầu của bạn theo cách tổng quát.

Một vị trí khác là thêm plugin Wayland nơi tất cả trình quản lý cửa sổ sẽ có cách chia sẻ cửa sổ hiện hoạt và theo cách nào đó thư viện để nói chuyện trực tiếp với wayland để khôi phục tính năng.

Vì vậy, ứng dụng của bạn đang gặp sự cố lớn. Hầu hết bạn có thể làm là yêu cầu này trên mutter (nơi là biết các cửa sổ đang hoạt động), nhưng theo ý kiến ​​của tôi nó không thể được giải quyết trong Mutter.

Tôi hy vọng điều này sẽ giúp bạn và bạn có thể tìm đường. Loock tốt.

Các vấn đề liên quan