Можно ли автоматизировать клики с помощью xdotool для управления сеансом графического интерфейса, отличным от того, который используется в настоящее время?

IIRC, когда-то был патч только RedHat, который сделал это конфигурируемым в ядрах RedHat.

Инго Молнар предложил нечто подобное в 2007 году, но его патч не был объединен.

Текущие ядра используют фиксированный однодневный интервал, введенный передают 11ff6f05f1e836a6a02369a4c4b64757e484adc1 в марте 2009.
Отрывок из fs/inode.c:

/*
 * With relative atime, only update atime if the previous atime is
 * earlier than either the ctime or mtime or if at least a day has
 * passed since the last atime update.
 */
static int relatime_need_update(struct vfsmount *mnt, struct inode *inode,
                             struct timespec now)
{

        if (!(mnt->mnt_flags & MNT_RELATIME))
                return 1;
        /*
         * Is mtime younger than atime? If yes, update atime:
         */
        if (timespec_compare(&inode->i_mtime, &inode->i_atime) >= 0)
                return 1;
        /*
         * Is ctime younger than atime? If yes, update atime:
         */
        if (timespec_compare(&inode->i_ctime, &inode->i_atime) >= 0)
                return 1;

        /*
         * Is the previous atime value older than a day? If yes,
         * update atime:
         */
        if ((long)(now.tv_sec - inode->i_atime.tv_sec) >= 24*60*60)
                return 1;
        /*
         * Good, we can skip the atime update:
         */
        return 0;
}

Я не совсем уверен, зависит ли это также от используемой файловой системы. Согласно linux-4.2.4/Documentation/filesystems/ocfs2.txt , OCFS2 имеет atime _ quantum ...

-121--138912-

Самый простой способ сделать это - создать gzipped tarball:

#!/bin/bash

tar cvzf ~/backups/log`date +"%Y%m%d"`/backup.tar.gz /var/log 

-121--248654-

Я бы определенно пошел с apt-пакетом (.deb). Вы будете гораздо проще управлять приложениями на целевых системах, и вы будете иметь гораздо более высокий уровень уверенности в ваших поставках программного обеспечения. APT - система скалы тела.

APT обеспечит разрешение всех программных обеспечений зависимостей. Python, с включенными «батарейками», имеет множество зависимостей от библиотек системного программного обеспечения. Если вы просто скачиваете код и перезаписываете приложение, то проверка того, что система содержит правильные версии библиотек, от которых может зависеть приложение, не выполняется. Это может привести к неправильному поведению приложения.

APT также выполняет большую проверку при создании пакета приложения. Существует множество инструментов APT и подсистем для построения пакетов python.

Я верю, что если вы попытаетесь создать собственную систему распределения, в долгосрочной перспективе вам придется разработать больше собственного кода и иметь больше логистических проблем.

С другой стороны, вам нужно будет научиться строить пакеты python в системе APT, что может быть очень важно, но я думаю, что это того стоит.

Как пользователь Debian и Ubuntu, разработчик, администратор и упаковщик более 15 лет, я бы не хотел, если бы поставщик хотел поставлять программное обеспечение вне системы APT из-за связанных с этим рисков.

1
22.06.2018, 04:06
1 ответ

Другой компонент, который вам не хватает, — это файл .Xauthority. Он содержит «файл cookie сеанса», который создается заново каждый раз при перезапуске сервера X11, и клиент должен иметь его для отправки любых команд на сервер X11. Этот файл обычно находится в ~/.Xauthority, хотя вы можете использовать переменную окружения $XAUTHORITY, чтобы указать другое местоположение.

Чтобы управлять сеансом GUI, который не принадлежит вам, вам необходимо получить доступ к файлу cookie сеанса этого другого сеанса.Если у него другое значение $DISPLAY, вы можете просто скопировать этот файл cookie сеанса в свой файл .Xauthorityс помощью команд xauth extractи xauth merge:

.
su newuser -c "xauth extract /home/newuser/.Xauthority $newuserDISPLAY" | xauth merge

Файл.Xauthority может одновременно содержать несколько файлов cookie сеанса для разных ДИСПЛЕЕВ.

Или, если файл cookie сеанса находится в уже доступном вам файле, вы можете использовать переменную $XAUTHORITY, чтобы указать на него.


Это начинает казаться проблемой XY:у вас есть что-то, чего вы хотите достичь, и, возможно, зациклились на xdotoolпредполагаемом способе достижения этого.

Но когда вы пытаетесь что-то автоматизировать, выполнение движений графического интерфейса с использованием xdotoolобычно является наименее удобным способом сделать это. Например, если вы хотите автоматизировать запуск Google Chrome от имени конкретного пользователя, вам не нужно имитировать щелчок по значку :, вы можете просто настроить правильное удостоверение и среду и просто запустить нужный процесс.

Например, чтобы запустить google-chromeкак пользователь newuser, вы можете сделать:

su -lc "DISPLAY=<whatever> google-chrome" newuser

Поскольку команда suимеет опцию -l, процесс google-chromeбудет иметь право $HOMEдля нового пользователя, поэтому он будет искать .Xauthorityв расположении по умолчанию, т. е. ~newuser/.Xauthority. Вам просто нужно указать правильное значение для переменной $DISPLAY, которое соответствует фактическому запущенному сеансу GUI newuser. Если вы хотите, чтобы Google Chrome открывал определенный URL-адрес, вы можете указать его в качестве аргумента для google-chromeв двойных кавычках.

1
27.01.2020, 23:43

Теги

Похожие вопросы