উত্তর:
আপনার নিজের উত্তর থেকে, আমি বুঝতে পারি আপনি একটি সুবিধাজনক জিইউআই সরঞ্জামের সন্ধান করছেন, সুতরাং:
"ব্যাখ্যা" এর নীচে আরও ব্যাখ্যা করা হয়েছে, উভয়ই wmctrl
এবং xdotool
কিছুটা ভুল উইন্ডোজাইজ ফিরে আসে।
নীচের স্ক্রিপ্ট (সূচক) প্যানেলের "বাস্তব" আকার এবং উইন্ডোর নেট আকার উভয়ই দেখায়।
#!/usr/bin/env python3
import signal
import gi
gi.require_version('AppIndicator3', '0.1')
gi.require_version('Gtk', '3.0')
import subprocess
from gi.repository import Gtk, AppIndicator3, GObject
import time
from threading import Thread
def get(cmd):
try:
return subprocess.check_output(cmd).decode("utf-8").strip()
except subprocess.CalledProcessError:
pass
# ---
# uncomment either one of two the lines below; the first one will let the user
# pick a window *after* the indicator started, the second one will pick the
# currently active window
# ---
window = get(["xdotool", "selectwindow"])
# window = get(["xdotool", "getactivewindow"])
class Indicator():
def __init__(self):
self.app = 'test123'
iconpath = "unity-display-panel"
self.indicator = AppIndicator3.Indicator.new(
self.app, iconpath,
AppIndicator3.IndicatorCategory.OTHER)
self.indicator.set_status(AppIndicator3.IndicatorStatus.ACTIVE)
self.indicator.set_menu(self.create_menu())
self.indicator.set_label(" ...Starting up", self.app)
# the thread:
self.update = Thread(target=self.show_seconds)
# daemonize the thread to make the indicator stopable
self.update.setDaemon(True)
self.update.start()
def create_menu(self):
menu = Gtk.Menu()
# separator
menu_sep = Gtk.SeparatorMenuItem()
menu.append(menu_sep)
# quit
item_quit = Gtk.MenuItem('Quit')
item_quit.connect('activate', self.stop)
menu.append(item_quit)
menu.show_all()
return menu
def show_seconds(self):
sizes1 = None
while True:
time.sleep(1)
sizes2 = self.getsize(window)
if sizes2 != sizes1:
GObject.idle_add(
self.indicator.set_label,
sizes2, self.app,
priority=GObject.PRIORITY_DEFAULT
)
sizes1 = sizes2
def getsize(self, window):
try:
nettsize = [int(n) for n in get([
"xdotool", "getwindowgeometry", window
]).splitlines()[-1].split()[-1].split("x")]
except AttributeError:
subprocess.Popen(["notify-send", "Missing data", "window "+window+\
" does not exist\n(terminating)"])
self.stop()
else:
add = [l for l in get(["xprop", "-id", window]).splitlines() if "FRAME" in l][0].split()
add = [int(n.replace(",", "")) for n in add[-4:]]
xadd = add[0]+add[1]; yadd = add[2]+add[3]
totalsize = [str(s) for s in [nettsize[0]+add[0]+add[1], nettsize[1]+add[2]+add[3]]]
displ_sizes = ["x".join(geo) for geo in [[str(s) for s in nettsize], totalsize]]
string = " "+displ_sizes[0]+" / "+displ_sizes[1]
return string+((25-len(string))*" ")
def stop(self, *args):
Gtk.main_quit()
Indicator()
GObject.threads_init()
signal.signal(signal.SIGINT, signal.SIG_DFL)
Gtk.main()
স্ক্রিপ্টটির জন্য xdotool ইনস্টল করা প্রয়োজন:
sudo apt-get install xdotool
একটি ফাঁকা ফাইলে স্ক্রিপ্টটি অনুলিপি করুন, এটি সংরক্ষণ করুন getwindowsize.py
কমান্ড দ্বারা টার্মিনাল উইন্ডো থেকে স্ক্রিপ্টটি পরীক্ষা করুন:
python3 /path/to/getwindowsize.py
স্ক্রিপ্টটি ফোকাসযুক্ত উইন্ডোটিকে ডায়নামিকভাবে নেট উইন্ডোজাইজ (উভয় wmctrl
এবং এর উভয় আউটপুট হিসাবে xdotool
) প্রদর্শন করতে এবং আসল উইন্ডো আকার, সাজসজ্জা ইত্যাদির সাথে প্রদর্শন করে p
আপনি যদি লক্ষ্যযুক্ত উইন্ডোটি বন্ধ করেন তবে সূচকটি একটি বার্তা দেখায়:
যদি সমস্ত ঠিকঠাক কাজ করে তবে এটিকে একটি শর্টকাট কীতে যুক্ত করুন: চয়ন করুন: সিস্টেম সেটিংস> "কীবোর্ড"> "শর্টকাটস"> "কাস্টম শর্টকাট"। "+" ক্লিক করুন এবং কমান্ডটি যুক্ত করুন:
python3 /path/to/getwindowsize.py
... কিছুটা ভুল
আপনি উল্লেখ:
আদর্শভাবে, সেই সরঞ্জামটি উবুন্টুর মেনু বারের আকারটি হ্রাস করবে
সম্পূর্ণ গল্পটি হ'ল উভয়ই wmctrl -lG
এবং xdotool getwindowgeometry
মেনু বার ছাড়া উইন্ডোর আকারটি ফেরত দেয়, বা যেমন এই উত্তরে ব্যাখ্যা করা হয়েছে :
কী হচ্ছে তা হ'ল ডাব্লুএমটিআরএল সজ্জায় অভ্যন্তরের উইন্ডোর জ্যামিতি ফিরিয়ে দিচ্ছে (উদাহরণস্বরূপ শিরোনাম বার এবং সীমানা সহ নয়)
তথ্য সঠিকভাবে পেতে, আমরা চালাতে পারি
xprop -id <window_id> | grep FRAME
এর ফলে আউটপুট হবে:
_NET_FRAME_EXTENTS(CARDINAL) = 0, 0, 28, 0
এখানে আমরা মান আমরা থেকে আউটপুট উইন্ডোর মাপ যোগ করতে প্রয়োজনীয় wmctrl
এবং xdotool
, বাম, ডান, উপরে এবং উইন্ডোর নীচে।
অন্য কথায়, এই ক্ষেত্রে যদি কোনও wmctrl
200x100 আকার দেখায় তবে আসল আকারটি 200x128।
ওপি দ্বারা প্রস্তাবিত হিসাবে, ব্যবহারকারী সূচকটি শুরু করার পরে প্রতিস্থাপন করে উইন্ডো বাছাই করতে পারে :
window = get(["xdotool", "getactivewindow"])
দ্বারা:
window = get(["xdotool", "selectwindow"])
স্ক্রিপ্টে, এই লাইনগুলির কোনও একটিই নিঃশর্ত হতে পারে।
wmctrl -lG
বিন্যাস সহ একটি টেবিলের মধ্যে সমস্ত খোলা উইন্ডোজের একটি তালিকা পেতে আপনি ব্যবহার করতে পারেন :
<window ID> <desktop ID> <x-coordinate> <y-coordinate> <width> <height> <client machine> <window title>
একটি উদাহরণ আউটপুট এটি দেখতে পারে:
$ wmctrl -lG
0x02a00002 0 -2020 -1180 1920 1080 MyHostName XdndCollectionWindowImp
0x02a00005 0 0 24 61 1056 MyHostName unity-launcher
0x02a00008 0 0 0 1920 24 MyHostName unity-panel
0x02a0000b 0 -1241 -728 1141 628 MyHostName unity-dash
0x02a0000c 0 -420 -300 320 200 MyHostName Hud
0x03a0000a 0 0 0 1920 1080 MyHostName Desktop
0x0400001d 0 61 24 1859 1056 MyHostName application development - A tool to get window dimensions - Ask Ubuntu - Mozilla Firefox
0x04200084 0 61 52 999 745 MyHostName Untitled Document 1 - gedit
আমি /unix/14159/how-do-i-find-the-window-dimension-and-position-accurately- অন্তর্ভুক্ত- বিবরণxwininfo -all
থেকে পেয়েছি ।
এটি কাজ করে তবে আমি এখনও আরও সুবিধাজনক সমাধান => একটি রিয়েল-টাইম জিইউআই সরঞ্জামের জন্য উন্মুক্ত।
xwininfo
ইতিমধ্যে খুঁজে পেয়েছেন । সম্ভবত আপনি আমার লেখা স্ক্রিপ্টটিতে আগ্রহী হবেন - এটি ব্যবহার করে xwininfo
তবে একটি জিইউআই পপআপ সহ, দয়া করে নীচে এটি দেখুন।
কেউ চেষ্টা করতে পারে:
xdotool search --name gnome-panel getwindowgeometry
জেনোম-প্যানেল ধরে নেওয়া উবুন্টুর টুলবারের প্রক্রিয়া নাম, তবে কে জানে।
(একটি প্রয়োজন হতে পারে sudo apt-get install xdotool
)
একটি খালি জিওআইআই জিনিসটির জন্য যে কেউ আরও খালি খালি প্রয়োজনীয় জিনিসগুলি প্রদর্শন করতে আরও উন্নতি করতে চাইতে পারে:
zenity --text-info --filename=<(xprop)
এটি পয়েন্টারটি এক্সপ্রপের ক্রসে পরিবর্তন করবে, তারপরে আপনি উইন্ডোটি ক্লিক করুন এবং এটি জিটিকে সংলাপে এক্সপ্রপের তথ্য মুদ্রণ করবে।
wmctrl
এবং এর সাথে বড় সমস্যাটি xdotool
হ'ল সেই সরঞ্জামগুলি ইনস্টল করা দরকার - সেগুলি ডিফল্টভাবে উবুন্টুতে নেই । তবে উবুন্টু জাহাজ নিয়ে xwininfo
। এটি একটি সাধারণ সরঞ্জাম যা ব্যবহারকারী-নির্বাচিত উইন্ডো সম্পর্কে তথ্য সরবরাহ করে।
সাধারণ ব্যবহারটি টার্মিনালে টাইপ করতে হবে xwininfo | awk '/Width/||/Height/'
( awk
আউটপুট ফিল্টার করার জন্য ব্যবহার করা বিজ্ঞপ্তি ), এবং যখন আপনার কার্সার আপনার পছন্দমতো x
জিইউআই উইন্ডো নির্বাচন করতে পরিবর্তন করে এবং এটি তার তথ্য প্রদর্শন করবে। উদাহরণ স্বরূপ:
$ xwininfo | awk '/Width/||/Height/'
Width: 602
Height: 398
সুতরাং সুবিধাগুলি হ'ল:
আমার মতো আপনার যদি 24/7 টি টার্মিনাল খোলা থাকে তবে আপনার কেবল xwininfo
প্রয়োজন। কিছু ব্যবহারকারী কীবোর্ড শর্টকাট থাকা পছন্দ করতে পারেন। নীচের স্ক্রিপ্টটি (যা একটি কীবোর্ড শর্টকাটের সাথে আবদ্ধ হওয়ার উদ্দেশ্যে) আপনার বর্তমানে সক্রিয় উইন্ডো সম্পর্কিত তথ্য সহ একটি গ্রাফিকাল পপআপ প্রদর্শন করতে দেয়। স্ক্রিনশটে দেখা যায়, এটি উইন্ডোর শিরোনাম, প্রস্থ এবং উচ্চতার তথ্য প্রদর্শন করে।
ফণা অধীনে এটি বিশেষভাবে দর্শনীয় কিছু করে না। এটি dbus
পরিষেবা থেকে তথ্য ব্যবহার করে xwininfo
এবং এটিকে সহজ পপআপে রাখে। উত্স কোডটি নীচে রয়েছে। মনে রাখবেন, স্ট্যান্ডার্ড স্ক্রিপ্টিং বিধিগুলি প্রযোজ্য: chmod +x
কীবোর্ড শর্টকাটের সাথে আবদ্ধ হওয়ার সাথে সাথে এটি কার্যকর করার অনুমতি রয়েছে কিনা তা নিশ্চিত করুন আপনি কমান্ড হিসাবে স্ক্রিপ্ট ফাইলটির পুরো পথ দেবেন।
#!/bin/bash
get_active_window()
{
qdbus org.ayatana.bamf \
/org/ayatana/bamf/matcher \
org.ayatana.bamf.matcher.ActiveWindow
}
get_active_name()
{
qdbus org.ayatana.bamf $1 \
org.ayatana.bamf.view.Name
}
main()
{
active_window=$(get_active_window)
active_xid=$( awk -F '/' '{print $NF}' <<< "$active_window" )
echo $active_xid
active_title=$(get_active_name $active_window)
dimensions=$(xwininfo -id "$active_xid" | awk '/Width/||/Height/')
text="$active_title\n""$dimensions"
zenity --info --text "$text" --width=200 --height=200
}
main $@
আমার উত্তর লেখার সময়, আমি বুঝতে পেরেছি যে এটি আমার বিদ্যমান প্রকল্পগুলির একটি - আয়াতানা সূচককে অন্তর্ভুক্ত করার জন্য একটি খুব দরকারী বৈশিষ্ট্য হবে। এই সূচকটি জিইউআই উইন্ডো সম্পর্কে সম্পূর্ণ পরিসীমা তথ্য প্রদর্শন করতে দেয়। বর্তমানে সক্রিয় বিকাশের অধীনে রয়েছে। জ্যামিতির তথ্য বৈশিষ্ট্যটি গিথুব সংগ্রহস্থলে যুক্ত করা হয়েছে এবং আমার ব্যক্তিগত পিপিএতে যাওয়ার পথে । এবং অবশ্যই এটি xwininfo
কিছুটা ভিন্ন উপায়ে ব্যবহার করে।
getactivewindow
দ্বারাselectwindow
, তাই যখন স্ক্রিপ্ট চালু আপনার কাছ থেকে মাত্রা পেতে জানালা কার্সার সঙ্গে চয়ন। আমি এই আচরণটি অনেক বেশি সুবিধাজনক বলে মনে করি। 2) আমি উবুন্টু পেস্ট করার জন্য কোডটি আপলোড করেছি , সুতরাং এটি সেট আপ করা সহজ: getwindowsize.py হিসাবে কেবল ডাউনলোড করুন এবং সংরক্ষণ করুন