systemctl - пользователь недоступен для www-data user

Фальшивый ответ кажется недостаточным для этого поддельного вопроса; поддержка сборки zsh для каталогов автомобилей работает на каталогах (fake-файлы dir:names), а не на шаблонах файлов в них. Это удобно для добавления специфических именованных файлов в каталог, который может подходить для automount или sshfs или настройки типа NetApp .snapshot, в которых каталог, монтируемый в каталог, является известным статическим именем, ALAS.

autoload -U compinit
compinit
zstyle ':completion:*' fake-files $HOME/.avfs:'ALAS POOR YORICK'

zshall(1) говорит, что "имена" - это строки, а эксперименты указывают на мета-символы (например # или \# или '*(e: "echo hi":)') "не работают" по-разному, поэтому я не знаю, как прокрасть глобус в часть имен утверждения fake-файлов . (Рассмотрение Src/Zle/computil.c может точно показать, какими могут быть имена, но это было бы больше похоже на работу). (Также, использование рекурсивных глобусов в позиции каталога для именования архивных файлов не летало, но опять же, потребуется погружение на C, чтобы увидеть, сколько подделок позволяет вам уйти от этого. )

С помощью compdef можно перечислить завершения каталога .avfs:

compdef '_files -g $HOME/.avfs/\*' -p \^
function andthehash {
  reply=($REPLY $REPLY\#)
}
compdef "_files -g $HOME/.avfs/'*(+andthehash)'" -p \^

За исключением того, что это не удастся, так как он покажет файлы # только тогда, когда это не имеет значения, и, таким образом, не сможет завершить их на них. (Есть продуктивное использование этой формы, хотя и не для этого случая.)

Использование zstyle приближает вас к следующему .zshrc:

autoload -U compinit
compinit

function UnderAVFS {
  local pdir
  [[ -z $1 ]] && return 1
  pdir=$1:a
  [[ ! -d $pdir ]] && pdir=$pdir:h
  [[ ! -d $pdir || $pdir == . ]] && return 1
  while [[ $pdir != / ]]; do
    [[ $pdir == $HOME/.avfs ]] && return 0
    pdir=$pdir:h
  done
  return 1
}

function AVFSExtras {
  if UnderAVFS $REPLY; then
    reply=($REPLY)
    # TODO embiggen list of archive suffixes
    [[ $REPLY == *.(bz2|tbz2) ]] && reply+=($REPLY\#)
  fi
}

# Try to match avfs, otherwise the default pattern. Probably could greatly
# benefit from caching, to avoid hits on UnderAVFS function.
zstyle ':completion:*' file-patterns '*(+AVFSExtras):avfs-files' '%p:all-files'

Однако, он может заполнять только до \#/ бита (на debian squeeze virt с настройкой avfs по умолчанию), но не в виртуальную файловую систему для архива, поэтому потребуется дополнительная работа, чтобы занести заполненные файлы в архивы. Я предполагаю через _call_program ... ls или что-то в этом роде для завершения в бите \#, если только нет более элегантного способа обмануть zsh, чтобы поверить в то, что каталоги, которых не существует, существуют.

Плохие новости! Завершение не проходит через _path_files для поддельных каталогов; подозреваю, что это связано с zsh globbing. Как zsh 4.something on, так и zsh 5.0.8 демонстрируют проблему. Поэтому я подозреваю, что для полного исправления потребовались бы патчи к _path_files, или чтобы написать что-нибудь другое, что в противном случае завершилось бы на этих поддельных каталогах. Отладочная трасса завершения может быть сгенерирована путем ввода ls /root/.avfs/root/sometar.gz\#/, а затем в конце этого ввода controll-x и затем ? , предполагая, что связующая клавиша -e и что _complete_debug обязательно скажет клавишу keycombo, если кто-то захочет разобраться, почему это не удается.

4
12.02.2018, 18:05
2 ответа

Así que finalmente pude descifrar la pieza faltante del rompecabezas. Gracias a algunos excelentes consejos de @JdeBP pude determinar:

  • systemd --el usuario estaba ejecutando para www -datos
  • DBUS _SESIÓN _BUS _DIRECCIÓN parece ignorarse en Ubuntu
  • XDG _TIEMPO DE EJECUCIÓN _DIR NO se configuró

Configurar XDG _RUNTIME _DIR para exportar "/run/user/$UID" resolvió mi problema

Pasos que seguí para obtener el comportamiento deseado:

% sudo loginctl enable-linger www-data # Enable systemd --user service to start at boot
% XDG_RUNTIME_DIR="/run/user/$UID" systemctl --user # Access services as www-data without actually logging in
6
27.01.2020, 20:46

Все это довольно уродливые обходные пути.

Как было сказано, проблема:

You are not logging in. You are augmenting the privileges of your existing login session […]

Таким образом, «просто» войти…

Если вы находитесь на сервере, вам нужно использовать терминал. Я должен был задать тот же вопрос , но, наконец, смог его выяснить. Решение так же просто, как запустить эту команду, чтобы переключиться на вашего пользователя (, соответственно запустить соответствующую оболочку с этим пользователем):

$ sudo machinectl shell --uid www-data

Обратите внимание, что sudo loginctl enable-linger www-dataпо-прежнему полезен, если вы собираетесь запускать службы или около того там, чтобы они запускались при загрузке. В противном случае они будут запускаться только при «логине» этого пользователя.

1
30.05.2021, 21:09

Теги

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