Если менеджер окон поддерживает Xlib существует. Это использует Python для установки размера окна на 500x300:
WIDTH, HEIGHT = 500, 300
import Xlib
import Xlib.display
display = Xlib.display.Display()
root = display.screen().root
windowID = root.get_full_property(display.intern_atom('_NET_ACTIVE_WINDOW'), Xlib.X.AnyPropertyType).value[0]
window = display.create_resource_object('window', windowID)
window.configure(width = WIDTH, height = HEIGHT)
display.sync()
Твердая часть получает окно ID; в вышеупомянутом коде это получило идентификатор активного окна. Если Вы хотите другой идентификатор, можно использовать что-то вроде этого, чтобы получить заголовок и управление PID каждого окна, и выбрать правильный идентификатор на основе тех:
windowIDs = root.get_full_property(display.intern_atom('_NET_CLIENT_LIST'), Xlib.X.AnyPropertyType).value
for windowID in windowIDs:
window = display.create_resource_object('window', windowID)
name = window.get_wm_name() # Title
prop = window.get_full_property(display.intern_atom('_NET_WM_PID'), Xlib.X.AnyPropertyType)
pid = prop.value[0] # PID
Я нашел сценарий на fluxbox Wiki, которая использует wmctrl
найти применение и повысить его окно, если это уже работает. Иначе сценарий запускает приложение. Я использую тот сценарий с тонкими настройками для поддержки аргументов, которые я зарегистрировал на своем блоге.
Удостовериться wmctrl
установлен.
sudo apt-get install wmctrl
Добавьте следующий сценарий к своему пути (возможно в $HOME/bin/find_app.sh
), и сделайте это исполняемым файлом.
#!/bin/bash
# Find_app
# Author: Lucas van Staden (lvs at dedmeet.com / http://www.dedmeet.com)
# This little script will try and find the application attempting to start
# in the running processes, and if found, focus the application
# if not found, a new instance will start
# usage:
# find_app.sh <application with full path>
# params
# 1 - application to start (full path)
# helper applications
DOLLARONE=$(echo $1 | sed -e 's/[\t ]*$//') #Delete trailing spaces
WMCTRL=`which wmctrl`;
GREP=`which grep`;
APPLICATION=$(echo $DOLLARONE | cut -d ' ' -f 1)
if [ "x$APPLICATION" != "x$DOLLARONE" ]; then
APPARGS=$(echo $DOLLARONE | cut -d ' ' -f 2)
fi
BASENAME=`basename $APPLICATION`;
BASENAME=`echo $BASENAME | tr "[:upper:]" "[:lower:]"`
FOUND=0;
function findwindow {
# 1 = BASENAME
# 2 = WMCTRL
# 3 = GREP
IFS=$'\n';
for RUNNING in `$2 -l -x`
do
if [ `echo $RUNNING | tr "[:upper:]" "[:lower:]" | $3 -c $DOLLARONE` -gt 0 ]
then
HOSTNAME=`hostname`
WINDOW=${RUNNING#*${HOSTNAME} }
$2 -a $WINDOW
FOUND=1;
fi;
done
}
if [ "x$APPARGS" = "x" ]; then
findwindow $BASENAME $WMCTRL $GREP;
if [ $FOUND -eq 0 ]
then
$APPLICATION &
sleep 2;
# Try and find the application, after opened
findwindow $BASENAME $WMCTRL $GREP;
if [ $FOUND -eq 0 ]
then
# Still not found, wait a bit more, and try again
sleep 3;
findwindow $BASENAME $WMCTRL $GREP;
fi
fi
else
$APPLICATION $APPARGS &
fi
Обновите настольные файлы записи приложений, Вы хотите иметь исключительный ярлык для запуска, а также повышения, так, чтобы приложения были вызваны через вышеупомянутый сценарий.
Например:
cp /usr/share/applications/firefox.desktop ~/.local/share/applications/
Править firefox.desktop
в ~/.local/share/applications/
и изменение Exec
строка для обращения к find_app.sh
:
Exec=find_app.sh "firefox %u"
Теперь добавьте сочетание клавиш для своего браузера по умолчанию:
Параметры настройки системы | клавиатура | ярлыки | средства запуска | веб-браузер запуска
Оболочка гнома перезапуска:Пресса Alt r
поднять диалоговое окно выполнения. Ввести r
и нажмите Enter
.
Необходимо теперь смочь запустить/повысить браузер с помощью единственного сочетания клавиш.
Существует подобный инструмент, названный xdotool. Это, кажется, является почти таким же как wmctrl. Основное преимущество перед последним, возможно, то, что оно использует идентификаторы X Window, а не строки для обработки окон. Я не знаю, имеет ли это значение очень в Вашем случае все же. Но скажите использование Chrome, открытого на веб-сайте, заголовок которого имеет Mozilla, затем Вы не можете определять приложение из заголовка окна.