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)
Можно сделать это, приняв меры, чтобы устройство было смонтировано с sync
опция. Но это не такая хорошая идея, потому что это может носить дешевые карты флэш-памяти с интерфейсом USB очень быстро (это было обсуждено в списке рассылки ядра Linux).
Последние версии Linux имеют flush
опция для файловых систем FAT, которая является где-нибудь между sync
и async
: это заставляет все отложенные записи быть сброшенными, как только диск становится неактивным. flush
опция идет по умолчанию в Ubuntu 10.04, но не в хрипящем Debian.
См., что также я должен размонтировать Карту памяти прежде, чем отключить его?
mount
команда имеет две связанных опции:
синхронизация Весь ввод-вывод к файловой системе должна быть сделана синхронно.
dirsync Все обновления каталога в файловой системе должен быть сделан синхронно.
Можно указать их в mount
команда -o
опция:
mount -o sync /mnt/flashdrive
Или в Вашем /etc/fstab
четвертый столбец:
/dev/sdb1 /mnt/flashdrive auto rw,user,noauto,sync 0 0