Экранирование команды linux

У меня была такая же проблема с уведомлением и отправкой.

Этот метод (также опубликованный здесь ) использует информацию о среде, которую предоставляет ps e . ps e -u имя пользователя | sed -rn 's /.* DISPLAY = (: [0-9] *). * / \ 1 / p ' выводит список всех номеров DISPLAY в средах всех процессов пользователя имя пользователя .

Если на вашем рабочем столе есть окно, принадлежащее пользователю root, то у пользователя root также будет несколько процессов с тем же номером DISPLAY, но в противном случае один DISPLAY должен быть связан только с одним пользователем. (Не наоборот - прямо сейчас я вошел в систему на двух терминалах с двумя сеансами X, поэтому я использую оба: 0 и: 1.)

Этот код выведет все используемые в настоящее время ДИСПЛЕИ (следовательно, все X сессий) всех вошедших в систему пользователей. (root пропускается)

Обратите внимание на sudo в команде ps : права root необходимы для просмотра окружения процессов других пользователей. Конечно, если скрипт запускается от root, в этом нет необходимости.

Имена пользователей и отображаемые числа используются в качестве индексов ассоциативных массивов для сохранения только уникальных значений.

#!/bin/bash

declare -A disps usrs
usrs=()
disps=()

for i in $(users);do
    [[ $i = root ]] && continue # skip root
    usrs[$i]=1
done # unique names

for u in "${!usrs[@]}"; do
    for i in $(sudo ps e -u "$u" | sed -rn 's/.* DISPLAY=(:[0-9]*).*/\1/p');do
        disps[$i]=$u
    done
done

for d in "${!disps[@]}";do
    echo "User: ${disps[$d]}, Display: $d"
    #sudo -u "${disps[$d]}" DISPLAY="$d" notify-send "Title" "Message"
done

Последняя закомментированная строка показывает, как можно вызвать notify-send.

1
15.08.2015, 02:05
0 ответов

Теги

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