Выход из системы пользователь 'имя пользователя':
skill -KILL -u username
Посмотрите man skill
xdotool
выставляет местоположение указателя (xdotool getmouselocation
), и последние версии (начиная с 2.20110530.1) указывают, какое окно в том местоположении также. Ни один из xwininfo
, wmctrl
или более старые версии xdotool
кажись, иметь способ соответствовать окну экранным положением, где это видимо.
Лежание в основе X вызовов библиотеки XQueryPointer
(соответствующий a QueryPointer
сообщение). Вот простой сценарий обертки Python вокруг этого вызова (использование ctypes
). Проверка ошибок в основном опущена. Предполагает, что Вы используете экран 0 (если Вы не знали, что дисплеи могли иметь больше чем один экран, проигнорировать это).
#! /usr/bin/env python
import sys
from ctypes import *
Xlib = CDLL("libX11.so.6")
display = Xlib.XOpenDisplay(None)
if display == 0: sys.exit(2)
w = Xlib.XRootWindow(display, c_int(0))
(root_id, child_id) = (c_uint32(), c_uint32())
(root_x, root_y, win_x, win_y) = (c_int(), c_int(), c_int(), c_int())
mask = c_uint()
ret = Xlib.XQueryPointer(display, c_uint32(w), byref(root_id), byref(child_id),
byref(root_x), byref(root_y),
byref(win_x), byref(win_y), byref(mask))
if ret == 0: sys.exit(1)
print child_id.value
Пример использования:
xwininfo -tree -id $(XQueryPointer)
xwininfo
команда дает этот вид вывода, но действительно необходимо нажать на окно, о котором Вы хотите информацию:
% xwininfo
xwininfo: Please select the window about which you
would like information by clicking the
mouse in that window.
xwininfo: Window id: 0xa0000d "flask"
...
Так выполнение: xwininfo | grep 'Window id:'
мог бы дать Вам что-то, из чего можно проанализировать идентификатор.
xwinfo |grep window id:' &
, и следующий за этим xdotool click 1
... но это рискует передним планом click
выполнение перед xdotool
захватывает мышь. Я был бы rathen не использовать номинальный 'сон n, поэтому хотя этот ответ на правильном пути, я буду ожидать wihile, чтобы видеть, поднимается ли что-то больше встроенное...
– Peter.O
06.07.2011, 08:39
попробуйте это, это использует только xdotool, но его версия - по крайней мере "2.20110530.1"
xdotool getmouselocation --shell | grep WINDOW
для получения идентификатора окна непосредственно, можно использовать это:
sedGetValue='s/.*=\(.*\)/\1/'
windowId=`xdotool getmouselocation --shell 2>/dev/null |grep WINDOW |sed "$sedGetValue"`
echo $windowId
Я играл вокруг с ответом от Peter. O и придумал:
xdotool click 1|xwininfo|grep 'Window id:'
ArchWiki имеет хороший ответ на это:
activeWinLine=$(xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)")
activeWinId=${activeWinLine:40}
Используя sed
можно сделать это в одной строке, которая является, вероятно, самым читаемым способом сделать это:
activeWin="$(xprop -root | sed -n 's/^_NET_ACTIVE_WINDOW(WINDOW): window id # //p')"
Отметьте это xdotool
пропускал в моем Debian минимальный X11 в то время как xprop
был включен (аналогично sed
конечно).
Если Вы не хотите разветвляться sed
ни grep
можно сделать текстовое преобразование это полностью в bash
, который, возможно, безопасен в случае, если вывод xprop
изменения немного:
activeWin="$(xprop -root)"
activeWin="${activeWin#*_NET_ACTIVE_WINDOW(WINDOW):}'
activeWin="${activeWin%%?_NET_*}'
activeWin="${activeWin##* }'
Так или иначе это - все еще странный способ заархивировать такую простую задачу.
XDOTool достаточно хорош, чтобы сделать это.
запустить XDOTOOL GetActiveWindow
, и вы увидите результат (INT)
Окно может быть над любым монитором. Просто прочитайте, где находится указатель X11, ожидающий щелчка :), и неважно, если это удаленное окно, VNCServer или 3-го рабочего стола для рабочего стола Cube. Просто работает.
Вы можете сыграть его, используя сон для лучшего тестирования Сон 3; XDOTool Click 1 + 2; xdotool getactactivewindow
.
Я вижу, что GetWindowsFocus
возвращает одинаковое значение, чем GetActiveWindow
.
Если вы выполните клики вручную, вы увидите контекстное меню, но щелкните 1 + 2 срабатывания оба щелчка во время нажатия на текущее местоположение мыши и получают нужный идентификатор.
Попробуйте это :)
xdotool click 1
метод, упомянутый в комментарии ответу Bruce Ediger.. Ненулевой настольный идентификатор действителен, поскольку он возвращает соответствующее изображение черезimport -window $nonzeroID screen.png
.... Есть ли некоторая простая тонкая настройка для сценария Python для возвращения того значения для рабочего стола? – Peter.O 06.07.2011, 16:48$(XQueryPointer)
для0
, и вызовxwininfo -root
поскольку это условие разрешает эту причуду..Спасибо.. – Peter.O 06.07.2011, 17:34root_id.value
еслиchild_id.value == 0
. – Gilles 'SO- stop being evil' 06.07.2011, 17:39if child_id.value == 0: print root_id.value
else: print child_id.value
:) – Peter.O 06.07.2011, 18:23sed /x[0-9]\\++/q\;d <(xwininfo -tree -id $(XQueryPointer))
– F. Hauri 15.02.2015, 00:19