ОСНОВАННЫЕ НА ОБ/МИН дистрибутивы как Red Hat легки:
rpm -qa --last
На Debian и других находящихся в dpkg дистрибутивах, Ваша определенная проблема легка также:
grep install /var/log/dpkg.log
Если файл журнала не был повернут, в этом случае необходимо попробовать:
grep install /var/log/dpkg.log /var/log/dpkg.log.1
В целом, dpkg
и apt
кажется, не отслеживаю дату установки, идущую отсутствием никакого подобного поля в dpkg-query
страница справочника.
И в конечном счете старый /var/log/dpkg.log.*
файлы будут удалены вращением журнала, так, чтобы путь, как гарантировали, не будет давать Вам всю историю Вашей системы.
Одно предложение, которое появляется несколько раз (например, этот поток) должно посмотреть на /var/lib/dpkg/info
каталог. Файлы там предполагают, что Вы могли бы попробовать что-то как:
ls -t /var/lib/dpkg/info/*.list | sed -e 's/\.list$//' | head -n 50
Для ответа на вопрос о выборах вот, первичная обработка.
список сборки пакетов датами
$ find /var/lib/dpkg/info -name "*.list" -exec stat -c $'%n\t%y' {} \; | \
sed -e 's,/var/lib/dpkg/info/,,' -e 's,\.list\t,\t,' | \
sort > ~/dpkglist.dates
список сборки установленных пакетов
$ dpkg --get-selections | sed -ne '/\tinstall$/{s/[[:space:]].*//;p}' | \
sort > ~/dpkglist.selections
присоединитесь к 2 спискам
$ join -1 1 -2 1 -t $'\t' ~/dpkglist.selections ~/dpkglist.dates \
> ~/dpkglist.selectiondates
По некоторым причинам это не печатает очень много различий для меня, таким образом, могла бы быть ошибка или недопустимое предположение о какой --get-selections
средства.
Можно, очевидно, ограничить пакеты любой при помощи find . -mtime -
или head -n
, и измените выходной формат как Вам угодно, например.
$ find /var/lib/dpkg/info -name "*.list" -mtime -4 | \
sed -e 's,/var/lib/dpkg/info/,,' -e 's,\.list$,,' | \
sort > ~/dpkglist.recent
$ join -1 1 -2 1 -t $'\t' ~/dpkglist.selections ~/dpkglist.recent \
> ~/dpkglist.recentselections
перечислять только выборы, которые были установлены (измененный?) за прошедшие 4 дня.
Вы могли, вероятно, также удалить sort
команды после проверки порядка сортировки, используемого dpkg --get-selections
и сделайте find
более эффективная команда.
Для запуска графической программы на рабочем столе пользователя необходимо найти две вещи: что отображается, рабочий стол пользователя идет (адрес) и что cookie авторизации использовать (пароль).
Следующая команда должна перечислить локальные дисплеи, что пользователь зарегистрирован (один на строку) на большинстве нельдов:
who | awk -v user="$target_user" '$1 == user && $2 ~ "^:" {print $2}'
Нахождение cookie авторизации немного более трудно. Необходимо искать файл cookie пользователя, который является ~/.Xauthority
по умолчанию (все, в чем Вы нуждаетесь, является местоположением файла cookie, Вы не должны извлекать cookie из него). Это работает над многими системами, но не всеми; это зависит от менеджера по оформлению и как это настраивается, и в особенности Gdm (значение по умолчанию на Ubuntu) не использовал местоположение по умолчанию в последний раз, я смотрел. Я не могу думать о портативном способе узнать фактическое X файлов cookie. Самый точный способ узнать состоит в том, чтобы узнать pid этих X процессов и искать аргумент -auth
опция. Иначе должен найти процесс, работающий на том X-сервере, и захватить XAUTHORITY
переменная environemnt. При наличии затруднений при нахождении файла cookie посмотрите Открытый окно на удаленном X дисплеев (почему "Не может открыть дисплей")?
После того как Вы имеете оба сведения, вставляете выбранный дисплей DISPLAY
переменная среды, выбранный X файлов cookie полномочий в XAUTHORITY
переменная среды, и Вы установлены. Это не имеет значения что пользователь прогоны программы как; объединение с su
если Вам нравится.
Я не могу полностью попробовать это, так как все мои машины имеют отключенный корень.
Для нахождения, какой дисплей пользователь работает можно использовать who
команда. Последним столбцом вывода обычно является ДИСПЛЕЙ, на котором зарегистрирован пользователь. Что-то вроде этого могло использоваться для захвата просто дисплея (там вероятно намного более эффективный способ сделать это, не стесняйтесь предлагать редактирования):
who | grep -m1 ^username.*\( | awk '{print $5}' | sed 's/[(|)]//g'
Затем запустить графическое X команд на том дисплее:
DISPLAY=:0 firefox &
где:0 был бы заменен любым дисплеем, Вы нашли в первой команде, и Firefox будет заменен любой командой, которую Вы хотите выполнить. Вы могли поместить это в сценарий оболочки и просто использовать переменную.
Следующая часть является первой частью, не протестировали, но я не вижу, почему не должно быть возможно сделать:
su username -c "DISPLAY=:0 firefox"
запустить эти X команд как того пользователя.
sudo -i
и не могло быть уверено, будут ли результаты отличаться, чем выполнение его после входа в систему как корень непосредственно. :-)
– Steven D
05.09.2010, 01:21
who | grep xeno| awk '{print $5}' | sed 's/[(|)]//g' | grep -v ^$
кажется, работает...
– xenoterracide
05.09.2010, 01:38
Вы могли посмотреть на то, как acpid делает это. Например, когда это дает команды xscreensaver или очищает экран для каждого пользователя, работающего X или X-сессии.
Например, в соответствии с Ubuntu этот файл содержит связанный материал:
/etc/acpi/lid.sh
Содержит этот цикл:
for x in /tmp/.X11-unix/*; do
displaynum=`echo $x | sed s#/tmp/.X11-unix/X##`
getXuser;
if [ x"$XAUTHORITY" != x"" ]; then
export DISPLAY=":$displaynum"
grep -q off-line /proc/acpi/ac_adapter/*/state
if [ $? = 1 ]
then
if pidof xscreensaver > /dev/null; then
su $user -c "xscreensaver-command -unthrottle"
fi
fi
if [ x$RADEON_LIGHT = xtrue ]; then
[ -x /usr/sbin/radeontool ] && radeontool light on
fi
if [ `pidof xscreensaver` ]; then
su $user -c "xscreensaver-command -deactivate"
fi
su $user -c "xset dpms force on"
fi
done
/usr/share/acpi-support/power-funcs
. Это звонит fgconsole
найти активный Linux vt, затем ищет X-сервер, отображающийся на этой консоли, и узнает пользователя оттуда. Затем это использует ~/.Xauthority
как X cookie, который, если нет что-то, которое я пропускаю средства, которые он на самом деле не сможет подключить к X-серверу (установка Ubuntu по умолчанию, с помощью gdm, не хранит эти X cookie в корневом каталоге пользователя).
– Gilles 'SO- stop being evil'
05.09.2010, 02:06
Расширение ответа Gilles состоит в том, как найти файл cookie. Один способ сделать это может состоять в том после установки DISPLAY
переменная среды (как описано Gilles), использовать strace
найти файлы xhost
доступ. Я могу думать о чем-то вроде этого в Bash:
# Set the DISPLAY variable first
DISPLAY = :0.0
# Use strace on xhost
strace xhost 2>&1 | grep access
Вывод из кода выше будет похож:
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
access("/home/someuser/.Xauthority", R_OK) = 0
Как можно ясно видеть, файл cookie непосредственно появится здесь.
В моем исследовании поиска элегантного способа отображения задач GUI или X из ограниченной среды, такой как правила udev или от суперпользователя, я недавно создал инструмент, который подходит для этого ( для более подробной информации ).
xpub
- это сценарий оболочки для получения переменных среды отображения X относительно текущего или заданного TTY.
Это пример правила udev:
IMPORT{program}="/usr/bin/xpub", \
RUN+="/bin/su $env{XUSER} -c '/usr/bin/notify-send Hello'"
$ env {ENV}
: если текущий tty-пользователь запускает X, в противном случае удалите его.
Принцип тот же, что и для командной строки, использующей экспорт
:
export $(xpub) ; su ${XUSER} -c 'notify-send Hello'
ps
илиhtop
или … – Gilles 'SO- stop being evil' 16.10.2014, 19:01pids=$(pgrep -u $target_user nautilus)
получает pid, и куда я должен поместить-auth
опция? – rubo77 16.10.2014, 19:08-auth
опция где угодно. Вы, возможно, должны искать его в командной строке процесса X-сервера для выяснения, что вставитьXAUTHORITY
переменная среды. Если у Вас есть процесс клиента, в чем Вы нуждаетесь, ничто о-auth
но значение того клиентаXAUTHORITY
переменная. Я не понимаю то, что Вы пытаетесь сделать. Можно хотеть задать новый вопрос. – Gilles 'SO- stop being evil' 16.10.2014, 19:12