Непоследовательное поведение “wmctrl-i-a <WIN>”

Этот сценарий оболочки должен обработать запуск и остановку любой программы:

#!/bin/bash

BASECMD=${1%%\ *}
PID=$(pgrep "$BASECMD")
if [ "$?" -eq "0" ]; then
    echo "at least one instance of "$BASECMD" found, killing all instances"
    kill $PID
else
    echo "no running instances of "$BASECMD" found, starting one"
    $1
 fi

скажем, Вы сохранили его под ~/mystarter, можно выполнить любую команду с ним использование ~/mystarter <name>, например, в Вашем случае, свяжите Meta+R с:

~/mystarter gnome-run

и удостоверьтесь, что сценарий является исполняемым файлом: chmod u+x ~/mystarter. Также, вероятно, лучше поместить его где-нибудь в Ваш PATH, таким образом, Вы не должны вводить, это - все местоположение каждый раз.

Что касается факта это gnome-run не обнаруживается в ps -A, удостоверьтесь, что гном выполняет себя, не сценарий, который запускает фактический процесс. Проверьте, существует ли различие между ps -A | wc -l прежде и после запуска его (это считает все рабочие процессы).

Править:

Так как Вы приняли ответ, я думал, что добавлю поддержку выполнения команд, которые имеют параметры командной строки, так, чтобы это могло бы стать местом ссылки. Выполните команду как так:

 ./mystarter 'cmd args'

например:

./mystarter 'ncmpcpp -c ~/.ncmpcpp'

Команда просто ищет ncmpcpp видеть, работает ли это уже, но выполняет полную команду (с аргументами) когда ncmpcpp не работал.

3
11.10.2012, 05:19
1 ответ

Я получил вещь, работающую после вожения с ним сегодня, но я не смог точно определить то, чем состояла в том проблема, когда я попробовал его в прошлый раз (я действительно переключался на Linux Mint тем временем; возможно, это решило проблему так или иначе.)

Вот рабочий сценарий для любого заинтересованного:

#!/bin/sh

# source dmenu config file if it exists
if [ -f $HOME/.dmenurc ]; then
    . $HOME/.dmenurc
else
    DMENU='dmenu -i'
fi

# get list of all windows, and their count
wmctrl_output=$(wmctrl -lx)
win_count=$(echo "$wmctrl_output" | wc -l)
# get rid of the hostname and the number in the 2nd column
hostname=$(uname -n)
win_list=$(echo "$wmctrl_output" | \
    sed -r -e 's/[^@]'$hostname'//' | \
    sed -r -e 's/ [0-9][0-9]? / /')

# select a window ($target) and extract its id ($target_id)
target=$(echo "$win_list" | $DMENU -l $win_count -p "Switch to: ")
target_id=$(echo "$target" | cut -d' ' -f1)

# switch to target window
cmd="wmctrl -i -a \"$target_id\""
eval "$cmd"

и мой ~/.dmenurc:

DMENU_FONT='-*-*-medium-r-*-*-18-*-*-*-*-*-*-*'
DMENU="dmenu -i -fn $DMENU_FONT -nb #1E2320 -nf #DBDBDB -sb #3f3f3f -sf #ffffff"

Все Вы должны, помещается сценарий где-нибудь на Вашем $PATH, сделайте его исполняемым файлом и свяжите ключ к нему.

1
27.01.2020, 21:32

Теги

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