2017-08-02 6 views
25

पृष्ठभूमि: मैं ActivityWatch नामक सॉफ़्टवेयर के टुकड़े पर काम कर रहा हूं जो आपके कंप्यूटर पर जो करता है उसे लॉग करता है। असल में कुछ मुद्दों को हल करने का प्रयास: रेस्क्यूटाइम, स्वस्पी, आर्बेट, आदिमैं जीनोम वेलैंड पर सक्रिय विंडो कैसे प्राप्त करूं?

हमारे द्वारा की जाने वाली मूल चीजों में से एक सक्रिय विंडो (वर्ग और शीर्षक) के बारे में लॉग जानकारी है। अतीत में, यह xprop का उपयोग करके लिनक्स पर और अब बिना पायथन-xlib का उपयोग कर किया गया है।

लेकिन अब हमें एक समस्या है: वेइलैंड बढ़ रहा है, और जहां तक ​​मैं देख सकता हूं कि वेलैंड में सक्रिय विंडो की कोई धारणा नहीं है। तो मेरा डर यह है कि हमें वेलैंड के लिए उपलब्ध प्रत्येक डेस्कटॉप वातावरण के लिए समर्थन लागू करना होगा (मान लीजिए कि वे सक्रिय विंडो के बारे में जानकारी प्राप्त करने की क्षमता प्रदान करेंगे)।

उम्मीद है कि वे अंत में अभिसरण जाएगा और इस करवाने के लिए कुछ सामान्य इंटरफेस है, लेकिन मैं अपनी सांस ...

मैं anticipating this issue किया गया है धारण नहीं कर रहा हूँ। लेकिन आज हमें एक वास्तविक Wayland उपयोगकर्ता द्वारा हमारे first user request for Wayland support मिल गया। चूंकि बड़े डिस्ट्रोज़ वीलैंड को डिफॉल्ट डिस्प्ले सर्वर प्रोटोकॉल के रूप में अपनाते हैं (फेडोरा 25 पहले से ही इसका उपयोग कर रहा है, उबंटू 17.10 में स्विच करेगा जो जल्द ही आ रहा है) स्थिति समय के साथ और अधिक महत्वपूर्ण हो जाएगी। ActivityWatch के लिए

प्रासंगिक मुद्दों:

ActivityWatch की तरह अन्य अनुप्रयोगों है कि एक ही कार्यक्षमता की आवश्यकता होगी (RescueTime, arbtt, selfspy, आदि) के होते हैं, वे वे अभीलैंड का समर्थन नहीं करते हैं और मुझे ऐसा करने की योजना बनाने के बारे में कोई जानकारी नहीं मिल रही है।

अब मैं से शुरू करने के लिए जीनोम के समर्थन को लागू करने में रुचि रखता हूं और पथ के साथ अधिक स्पष्ट हो जाता है क्योंकि दूसरों के साथ अनुवर्ती होता है।

ऐसा ही एक सवाल वेस्टन के विषय में यहां कहा गया है: get the list of active windows in wayland weston

संपादित करें:

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 :) 

संपादित करें 2: मैं Freenode पर #wayland में पूछा, निम्नलिखित जबाब मिला दायर enhancement issue in the Gnome bugtracker

tl; dr: वेनल का उपयोग करते समय मुझे जीनोम पर सक्रिय विंडो कैसे प्राप्त हो सकती है?

उत्तर

-1

मेरे पास preguiça.py नामक एक स्क्रिप्ट है, जो वास्तव में आप कर रहे हैं, हालांकि यह शायद बहुत आसान है और मैंने इसे जारी नहीं किया है।

मेरी लिपि के लिए, मैंने PyGObject's विंडो नेविगेटर कंस्ट्रक्शन किट (Wnck) का उपयोग करके विंडो शीर्षक प्राप्त किया।

यहाँ अनिवार्य भागों के साथ यह का एक सरलीकृत संस्करण है,:

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() 

आप क्या कह रहे हैं वास्तव में ऊपर के उदाहरण पर बाहर टिप्पणी की है के लिए वास्तविक कोड (मैं खिड़की पर कब्जा करने की जरूरत नहीं थी , क्योंकि कॉलबैक पहले ही इसे प्राप्त करता है), लेकिन आपको इसके कार्यान्वयन के आधार पर इसकी आवश्यकता हो सकती है।

मैंने इसे एक्स के लिए लिखा था, और जब मैंने वेलैंड में स्विच किया तो शिकायत नहीं की, इसलिए यह शायद आपके लिए काम करना चाहिए।

ध्यान दें कि वे Wayland से जानकारी प्राप्त नहीं करते हैं, जैसा कि आपने पूछा था, लेकिन यह वास्तव में बेहतर है, क्योंकि यह एक्स/वेलैंड-अज्ञेयवादी होगा। इसे खोले गए एक्सटेरम से शीर्षक मिला, इसलिए यह टूलकिट-अज्ञेयवादी भी होना चाहिए।

हालांकि, कार्यान्वयन के विवरण पर मुझसे मत पूछें। कोड कम से कम चार साल पुराना है :)

+3

पहली नज़र में यह अच्छा लग रहा है। मैं अभी इस परीक्षण का परीक्षण करने में असमर्थ हूं लेकिन [screen_get_default' पर प्रलेखन] के अनुसार (https://developer.gnome.org/libwnck/stable/WnckScreen.html#wnck-screen-get-default): "यह X11 पर नहीं तो शून्य वापस कर सकते हैं। " मैं अब के लिए अपने आशावाद को रोक रहा हूं ... – erb

+1

यह चेतावनी है कि 'Wnck.Screen.get_default() 'देता है:' (।: 9342): Wnck-चेतावनी **: libwnck केवल X11 में काम करने के लिए डिज़ाइन किया गया है , कोई वैध प्रदर्शन नहीं मिला ' – sebix

2

मेरी राय में आपके पास सबसे अच्छा विकल्प है वेलैंड या कोई उपलब्ध लाइब्रेरी नहीं है (कोई भी नहीं है)। दरअसल, जो सक्रिय विंडोज़ के बारे में gnome-wayland में जानते हैं वह मटर है, इसलिए आपको सक्रिय विंडोज़ मटर से पूछने का तरीका ढूंढना होगा। जीनोम सक्रिय रूप से सक्रिय विंडो को विचलित करने और funcionality बहाल करने के लिए एक एपीआई develp कर सकते हैं। लेकिन वास्तव में, आपके पास इसके लिए पूछने की जगह नहीं है। मटर अपने आंतरिक प्रतिनिधित्व तक पहुंचने के लिए एक एपीआई विकसित नहीं करेगा, क्योंकि यह केवल मटर के विशिष्ट विशिष्ट होगा और सभी Wayland विंडोज मैनेजर के लिए नहीं। इसलिए इसे बाहरी पुस्तकालय में जोड़ा जाना आवश्यक है, जहां यह लाइब्रेरी शायद वर्तमान विंडो मैनेजर के साथ बात कर सकती है जिसका उपयोग सामान्य रूप से आपके अनुरोध को हल करने के लिए किया जा रहा है।

एक और सकारात्मकता एक वेंडलैंड प्लगइन जोड़ती है जहां सभी विंडोज मैनेजर के पास मौजूदा सक्रिय विंडोज़ साझा करने का तरीका होगा और किसी भी तरह से लाइब्रेरी को funcionality को पुनर्स्थापित करने के लिए सीधे रास्ते से बात करने का तरीका होगा।

तो, आपका ऐप एक बड़ी समस्या में है। आप जो भी कर सकते हैं वह म्यूटेटर (जहां सक्रिय विंडो पता है) पर अनुरोध है, लेकिन मेरी राय में इसे मटर में हल नहीं किया जा सकता है।

मुझे आशा है कि यह आपकी मदद करेगा और आप एक रास्ता ढूंढ सकते हैं। अच्छा लॉक

संबंधित मुद्दे