Действительно ли возможно выполнить подкоманду от Gnome средство запуска Shell?

Необходимо использовать некоторые механизмы, чтобы удостовериться, что cronjobs/monitoring сервисы знают о времени простоя/плановом обслуживании. Много программ в последнее время, таких как Nagios, Zabbix предлагают такое решение, где в Вас может выполнить плановое обслуживание и сделать Nagios, знающий о нем через его интерфейс, за это время, Nagios не попытается контролировать сервис.

Или более более простой, для не чрезмерного увеличения размера на использование тяжелого Nagios для единственного простого сервисного контрольного сервиса, делают cronjob сценарий, знающий о некотором механизме захвата файла, если блокировка файла существует, проигнорируйте любое состояние для сервиса и не делайте spurr или вопля на выводе. Это до Администратора, чтобы удостовериться, что блокировка файла удалена после того, как плановое обслуживание закончено, так, чтобы cronjob сценарий мог забрать, чтобы начать контролировать систему.

3
14.03.2013, 19:40
2 ответа

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

Когда дело доходит до запуска приложений от тире, gnome-shell значения по умолчанию к активации приложения вместо того, чтобы запустить его, если другой экземпляр уже работает (как долго, поскольку Вы не используете Ctrl + щелчок для фактического запуска нового экземпляра).
gnome-shell поведение может быть изменено через расширения оболочки, таким образом, в Вашем особом случае дополнительное переопределение onActivate от /usr/share/gnome-shell/js/ui/appDisplay.js должен сделать то, что Вы хотите:

  • Создайте дополнительную папку:

mkdir -p ~/.local/share/gnome-shell/extensions/geany-launcher@blahblah.blah

  • Добавьте эти два файла внутри:

metadata.json:

{
    "shell-version": ["3.6.3.1"], 
    "uuid": "geany-launcher@blahblah.blah", 
    "name": "Geany Launcher", 
    "description": "Fire up new window if no instance on current workspace"
}

extension.js:

const Clutter = imports.gi.Clutter;
const Shell = imports.gi.Shell;
const Main = imports.ui.main;
const AppDisplay = imports.ui.appDisplay;

var _onActivateOriginal = null;

function  _onActivate(event) {
        this.emit('launching');
        let modifiers = event.get_state();
        let cTRL = Clutter.ModifierType.CONTROL_MASK;
        let rUN = Shell.AppState.RUNNING;
        let crtW = global.screen.get_active_workspace();
        if (this._onActivateOverride) {
            this._onActivateOverride(event);
        } else {
            if (this.app.get_id() == "geany.desktop") {
                if (this.app.state == rUN && ((modifiers & cTRL) || !this.app.is_on_workspace(crtW))) {
                    this.app.open_new_window(-1);
                } else {
                    this.app.activate();
                    } 
            } else {
                if (modifiers & cTRL && this.app.state == rUN) {
                    this.app.open_new_window(-1);
                } else {
                    this.app.activate();
                    }
                }
            }
        Main.overview.hide();
}

function init() {
  _onActivateOriginal = AppDisplay.AppWellIcon.prototype._onActivate;
}

function enable() {
  AppDisplay.AppWellIcon.prototype._onActivate = _onActivate;
}

function disable() {
  AppDisplay.AppWellIcon.prototype._onActivate = _onActivateOriginal;
}
  • Оболочка перезапуска с Высоким звуком + F2, r, Входит. Затем включите расширение с gnome-tweak-tool (Вы, возможно, должны были бы перезапустить оболочку еще раз для включения расширения).

Это работает с gnome-shell-3.6.3.1, если у Вас есть другое редактирование версии metadata.json и измените эту строку для отражения версии оболочки (никакая гарантия, она работала бы с более старыми версиями оболочки как 3.4.x или будущими версиями как 3.8.x):

"shell-version": ["3.6.3.1"],

Обратите внимание, что расширение только переопределяет поведение оболочки, если Вы (дважды) нажимаете файлы в Nautilusоткрыть их с Geany это все еще активировало бы главное окно на другом рабочем столе, таким образом, необходимо будет также обратиться к приему сценария оболочки для получения последовательного поведения: откройте новое окно, только если никакой экземпляр не находится на текущем рабочем столе, иначе активируют существующий. Я не имею xprop установленный, но это работает над моей системой:

  • Создайте новый исполняемый файл где-нибудь в моем $PATH (как /usr/local/bin/djinni):
#!/bin/sh

geany --socket-file /tmp/geany-sock-$(xdotool get_desktop) ${1+"$@"}
  • Укажите на средство запуска (/usr/share/applications/geany.desktop) к недавно созданному сценарию:

    Exec=djinni %F

1
27.01.2020, 21:32
  • 1
    alias touch_open='touch myfile.txt; open myfile.txt' работал бы для создания Псевдонима. С другой стороны, мог записать небольшую функцию, которая возьмет в параметре, т.е. function touch_open { touch "$@"; open "$@"; } и затем выполненный, что как touch_open myfile.txt ---------121 спасибо--------116633----! Это, по-видимому, что я искал. Часть, которую я добавил, находится в моем .bashrc Я исказил geany для указания на мой новый исполняемый файл (alias geany=/usr/local/bin/geany2), который, кажется, более надежен по некоторым причинам, чем искажение к оригиналу ---socket-file команда. –  ND Geek 04.04.2013, 17:45

Одно возможное обходное решение должно сохранить Вашу команду к ~/bin/geany:

mkdir -p ~/bin
cat > ~/bin/geany
/usr/bin/geany --socket-file=/tmp/geany-sock-$(xprop -root _NET_CURRENT_DESKTOP | awk '{print $3}') $1
^d
chmod 755 ~/bin/geany

исполняемый файл и делает .desktop средство запуска как это: /home/$USER/bin/geany %F.

0
27.01.2020, 21:32

Теги

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