Как проверить, допустим ли ДИСПЛЕЙ

Можно использовать следующую функцию, которые используют тот же путь sudo автозавершение генерирует список завершения:

comp() {
    local COMP_LINE="$*"
    local COMP_WORDS=("$@")
    local COMP_CWORD=${#COMP_WORDS[@]}
    ((COMP_CWORD--))
    local COMP_POINT=${#COMP_LINE}
    local COMP_WORDBREAKS='"'"'><=;|&(:"
    # Don't really thing any real autocompletion script will rely on
    # the following 2 vars, but on principle they could ~~~  LOL.
    local COMP_TYPE=9
    local COMP_KEY=9
    _command_offset 0
    echo ${COMPREPLY[@]}
}
comp git config ''

где _command_offset определяется в завершении удара (пакет).

Примечание: функциональная потребность, которая будет выполнена в интерактивной оболочке (т.е. если это находится в файле, файл должен быть получен вместо просто выполнения.) или необходимые правила/функции завершения не будут определены.

PS. compgen -A только работы для встроенных действий, что необходимо было попробовать (но не работает ни один) compgen -F (или на самом деле compgen -o bashdefault -o default -o nospace -F _git). Причина это не работает (и документ для удара встроенные команды включая compgen/complete) может быть найдена в ударе (1).

4
04.12.2012, 03:21
2 ответа

Возможно, что-то как:

if sudo -Hu "$user" xdpyinfo -display "$DISPLAY" > /dev/null 2>&1; then
  echo "user $user can connect to display $DISPLAY"
else
  echo "user $user cannot connect to display $DISPLAY"
fi

Если Вы не имеете xdpyinfo, можно попробовать любую из тех стандартных простых утилит X11, которые ничего не отображают на X-сервере (с их stdout и stderr, перенаправленным к/dev/null как вышеупомянутый):

xlsatoms -name PRIMARY
xprop -notype -root CUT_BUFFER0
xwininfo -root
5
27.01.2020, 20:51
  • 1
    , когда xdpyinfo не установлен, можно использовать xterm -iconic -e exit вместо этого.... –  Erik Aronesty 26.06.2015, 21:09

Если :0 когда-нибудь были допустимый дисплей, процесс, т.е. xserver, если это, будет принадлежать корню. Независимо от того, что Вы подразумеваете допустимый.

Если Вы хотите знать, можно ли соединиться с xserver, я предложил бы использовать xlsclients соединяться с тем дисплеем. Если команда может соединиться, она возвратится 0, если она не может он возвращаться 1.

X не работает способом, который один пользователь подключает однажды к одному xserver. Для связи пользователей с xsessions, необходимо посмотреть на программы, подключенные к xserver. Windowmanagers являются хорошими кандидатами на это, b/c в любое время может быть только один (активный) windowmanager. Можно также отследить отношения процесса (родитель, ребенок) запускающийся от менеджера по оформлению. Однако это никогда не тривиально. Возможно, менеджеры по оформлению хранят эту информацию где-нибудь, но что я не знал бы.

2
27.01.2020, 20:51

Теги

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