Я только что перезапустил Ubuntu, но я забыл, что виртуальная машина была открыта в фоновом режиме (с минимизированным значком на панели задач). Можно ли настроить Ubuntu таким образом, чтобы, если запущено пользовательское приложение , то перед перезагрузкой / выключением было выдано предупреждение? Я использую версию 16.04.
Рев сценария контролирует все или пользовательское приложение для присутствия, и если то присутствие будет найдено - то системе будут препятствовать закрыться через графическое диалоговое окно (завершение работы через командную строку не будет затронуто, поскольку это - задача, примененная системными администраторами, которые знают то, что они делают).
Существует 3 опции:
-a
Контролируйте любые открытые приложения.
-c
Графически выберите приложение
-s
укажите .desktop файл для приложения на командной строке
-h
печатает синтаксис и список опций.
-c
вариант подходит для одной сессии только, где Вы хотите просто нажать на окно и монитор это. -a
и -s
варианты являются подходящими, чтобы быть добавленными как записи автоматического запуска, которые будут запущены на системном входе в систему. -s
опция может использоваться или с полным путем или с частью его, например, также /usr/share/applications/firefox.desktop
или firefox.desktop
одинаково приемлемы.
Источник сценария доступен здесь или на моем GitHub. Пользователи могут получить сценарий или через клонирование целого репозитория или через использование
wget https://raw.githubusercontent.com/SergKolo/sergrep/master/safe_shutdown.sh && chmod +x safe_shutdown.sh
команда для получения просто самого сценария.
#!/usr/bin/env bash
#
###########################################################
# Author: Serg Kolo , contact: 1047481448@qq.com
# Date: May 14th , 2016
# Purpose: Ensure that user closes all or specific
# running windows and exits without any work
# lost
# Written for: http://askubuntu.com/q/771227/295286
# Tested on: Ubuntu 14.04 LTS
###########################################################
# Copyright: Serg Kolo , 2016
#
# Permission to use, copy, modify, and distribute this software is hereby granted
# without fee, provided that the copyright notice above and this permission statement
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# DEALINGS IN THE SOFTWARE.
ARGV0="$0"
ARGC=$#
_notify_user()
{
# Close the shutdown dialog and display
# graphical popup which will ask user's shutdown
# confirmation. If user clicks OK , we shutdown.
# If cancel - no action.
qdbus com.canonical.Unity \
/com/canonical/Unity/Session \
com.canonical.Unity.Session.CancelAction
if zenity --question --title='WARNING!' \
--text="You have running apps. Shutdown anyway ?" \
2> /dev/null
then
qdbus com.canonical.Unity \
/com/canonical/Unity/Session \
com.canonical.Unity.Session.Shutdown
fi
}
_get_running_apps()
{
# Gets list of .desktop files for each
# running app
qdbus org.ayatana.bamf \
/org/ayatana/bamf/matcher \
org.ayatana.bamf.matcher.RunningApplicationsDesktopFiles
}
_check_any_running()
{
# Among the running apps there's always one
# .desktop file, which is compiz.desktop.
# We want to know if there's anything besides that
if [ $( _get_running_apps | wc -l ) -gt 1 ];
then
_notify_user
fi
}
_check_specific_running()
{
# Get list of running apps and see if
# the .desktop file we got is on the list
if _get_running_apps | grep -q "$1"
then
_notify_user
fi
}
_select_app()
{
# xwininfo provides nice interface which allows selecting
# a window. The rest is just simple parsing and passing
# around the XID of the app.
notify-send 'Select a window you would like to monitor '
XID=$(xwininfo -int | awk '/xwininfo: Window id/{print $4}')
APP=$(qdbus org.ayatana.bamf \
/org/ayatana/bamf/matcher \
org.ayatana.bamf.matcher.ApplicationForXid $XID )
qdbus org.ayatana.bamf \
"$APP" org.ayatana.bamf.application.DesktopFile
}
_print_usage()
{
cat <<EOF
safe_shutdown.sh [-a | -c |-s DESKTOP_FILE | -h ]
Options:
-a Monitor any open applications.
-c Graphically select an app
-s specify .desktop file for app on command line
-h print this text
Copyright Serg Kolo , 2016
EOF
}
parse_args()
{
if [ $ARGC -eq 0 ] ; then
printf "%s: No option specified\n Usage:\n" ${ARGV0##*/}
_print_usage
exit 1
fi
local OPTIND opt
while getopts "acs:" opt
do
case ${opt} in
a) FUNCTION="_check_any_running"
break
;;
c)
DESK_FILE=$(_select_app )
FUNCTION=" _check_specific_running $DESK_FILE "
break
;;
s) DESK_FILE=${OPTARG}
FUNCTION=" _check_specific_running $DESK_FILE "
break
;;
h) _print_usage
exit 0
;;
\?)
echo "Invalid option: -$OPTARG" >&2
exit 1
;;
esac
done
shift $((OPTIND-1))
}
main()
{
# Basic idea is to let user chose what to do
# then monitor dbus for appropriate signal
# Once the RebootRequested signal is received
# then perform appropriate checks ( for a specific
# or all apps ).
local FUNCTION
parse_args "$@"
dbus-monitor --profile \
"interface='com.canonical.Unity.Session',type=signal" |
while read -r line;
do
case "$line" in
*RebootRequested*) $FUNCTION ;;
esac
done
}
main "$@"
setfacl -R -m u:ripon:r-x /home/london/monir/
и теперь CAN файлов быть открытой и считанной Рипоном. Это means: -i have to give execute (x) permission as well to ripon to open the text file by him
. Огромное спасибо:) Между прочим, я думалexecute
, только относится к файлам, которые являются.exe
или что-то как он. – jabi 24 October 2017 в 21:40