Исходное сообщение касалось использования сценария для отображения приложения в определенной рабочей области, например, в сценарии запуска можно было использовать другой сценарий, чтобы позволить пользователю продолжать работу, в то время как очень медленно запускающееся приложение загружается в другую рабочую область. Мой сценарий отлично работает в качестве интерфейса -для довольно громоздкого синтаксиса wmctrl, чтобы запускать любое приложение в любой заданной рабочей области из любой командной строки. Таким образом, следующий сценарий, который просто перечисляет что-то вроде lh 1 thunderbird; lh 2 firefox; lh 3 calculator
.... или что-то еще, теперь прост. Однако есть некоторые трудности с синхронизацией, поэтому в моем сценарии есть сон. Ниже представлена обновленная версия, которую я больше не буду поддерживать и публиковать. Используйте КАК ЕСТЬ, никаких гарантий пригодности для любого конкретного использования. Измените, как вам угодно. Я предлагаю сохранить как /usr/local/bin/lh
просто потому, что lh
не является никаким другим известным именем программы, по крайней мере, не в Mint 18. Что касается переменных — я цитировал переменные, которые считал необходимыми.
#!/bin/sh
## Author: B.A. Computer Services www.ba-computer.com
## Purpose: Frontend to launch anything on a specific desktop/workspace.
## lh is short for LaunchHere
USAGE="USAGE: $(basename $0) [-r] workspace(1,2,..) command\
LaunchHere launches COMMAND on specific workspace.\
-r option returns to current workspace"
[ -z "$1" ] && echo $USAGE && exit 0
ISRETURN=$(false); [ "$1" = "-r" ] && ISRETURN=true && shift;
WRKSPC=$1;[ -z "$WRKSPC" ] && echo $USAGE && exit 0
WSN=$(expr $WRKSPC - 1) ## wmctrl starts with 0 as first wrkspc
shift; CMD="$*"; [ -z "$CMD" ] && echo $USAGE && exit 0
WM=$(which wmctrl);[ -z "$WM" ] && echo MISSING wmctrl && exit 1
CURRENT=$(wmctrl -d | grep '*' | cut -c1)
# Switch to desired workspace
$WM -s $WSN
$CMD &
PID=$!
echo Executed $CMD on workspace $WRKSPC, PID=$PID
sleep 3
# Return to CURRENT workspace ?
# [ $ISRETURN ] && echo TRUE || echo FALSE
[ $ISRETURN ] && $WM -s $CURRENT
Как уже упоминал Кусалананда♦, вы настраиваете sudo через файл конфигурации, где вы можете заархивировать описанное вами поведение.
Пользователь может вызвать конкретную команду без указания пароля. Это не означает, что у вас есть полный sudo
доступ. У вас есть разрешение только на запуск одной команды.
Пример конфигурации для этого:
david ALL=(ALL) NOPASSWD: /usr/bin/journalctl
(еще наhttps://askubuntu.com/questions/147241/execute-sudo-without-password)
sudo
. /etc/sudoers
). Это объясняется тем, как работает sudo.Sudo просто проверяет конфигурацию в тот момент, когда вы вызываете с ней команду -, и этот процесс требует привилегий суперпользователя. Таким образом, не может быть непривилегированного инструмента, в котором перечислены настройки. Личный совет :Попробуйте другие методы повышения привилегий. Sudo достаточно безопасен, если конфигурация правильная.
sudo
запомнит, что вы ввели пароль, и некоторое время не будет спрашивать снова (это зависит от конфигурации ).
Файл /etc/sudoers
имеет конфигурацию для sudo
. Вы можете настроить:
Возможно, он настроен так, что некоторые команды можно запускать без пароля.
Все это не имеет ничего общего с установленным -битом uid. Этот бит, как вы, кажется, знаете, дает программе привилегии root (см. также возможности :root is dead, да здравствуют возможности ). Один sudo
может делать что угодно, он решает, что делать на основе своего кода и файла конфигурации.