Фильтр CUPS для необработанной очереди

Разница в области применения и синтаксически является очень тонкой:

$ ./updater

является эквивалентом

$ /bin/bash ./updater

, он запускает скрипт (если он помечен как исполняемый и на файловой системе, установленной на вариант - Последняя форма работает, даже если одно из этих условий не выполнено). Это означает, что он порождает новый экземпляр оболочки и питает его содержание сценария. Таким образом, любые, определенные в нем псевдонимы, ограничены продолжительностью интерпретации оболочки, которая является только до конца скрипта.

$ . updater
$ . ./updater
$ source updater
$ source ./updater

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

Также поэтому вы иногда видите файлы Shell init ( ~ / .bashrc в случае bash), который выглядит так:

#!/bin/bash
for n in ~/etc/bash/*; do
    . $n
done

где ~ / etc / bash Может выглядеть как:

~/etc/bash/
|-- bash.10.env
|-- bash.20.aliases
`-- bash.30.func

(имена довольно явно объясняют). Всякий раз, когда вы добавляете некоторые файлы в каталог in in, все, что вам нужно сделать, чтобы применить изменения, - это . ~ / .bashrc . Для чего вы можете иметь псевдоним, конечно. Это также может быть расширено - например, имеющие специализированные инициализацию в зависимости от имени хоста (или фазы луны с использованием POM из BSG-Games).

Одно большое предупреждение для этих установок: обязательно сделайте файлы init «Re-Apperent» в том смысле, что не имеет значения, сколько раз вы их истощаете в одной оболочке - например переменные, которые вы можете захотеть сохранить Определяется условно:

VAR=${VAR:-"value"}

вместо безоговорочно:

VAR="value"
1
26.06.2014, 18:59
1 ответ

127.0.0.1 и 0.0.0.0

127.0.0.1 означает локальный интерфейс или адрес закольцовывания. Доступно только с локального хоста.

0,0,0,0 - это подстановочный адрес для каждого интерфейса.

В netstat -ntlp Локальный адрес означает «Печать активных прослушивающих TCP-соединений, отображение IP-адресов в виде числовых значений и отображение PID и имени программы, использующей это соединение».


Различие в примере

. Если у меня есть

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name                 
tcp        0      0 127.0.1.1:53            0.0.0.0:*               LISTEN      1189/prog1
tcp        0      0 0.0.0.0:6666            0.0.0.0:*               LISTEN      1188/prog2

, это означает:

Служба prog1 с PID 1189 прослушивает порт 53 с протоколом tcp . Он доступен только с локального хоста.

Служба prog2 с PID 1189 прослушивает порт 6666 с протоколом tcp . Доступ к этому порту разрешен с любого другого компьютера во всех сетях, частью которых является компьютер.

Источники: 1 2 3

-121--2395-

Есть много способов сделать это, конечно, но почему вы хотите? Это то, что файл fstab является для .

Некоторые идеи:

  • Создайте системное монтирование или автомонтирование (или просто простой сценарий запуска, выполняющий монтирование ).
  • Для запуска монтирования используйте crontab.
  • Наличие сценария запуска в среде рабочего стола.
  • Найдите инструмент в официальных репо или AUR, который сделает это для вас (у меня нет рекомендации).
  • Вставьте злой взлом, где бы вы ни выбрали.
-121--114493-

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

Для этого существует пакет openSUSE RPM, который предоставляет внутренний узел трубы CUPS , который может использоваться с CentOS. Этот бэкэнд используется как канал командной строки.

Я загрузил указанный выше RPM и извлекл сценарий канала. Этот сценарий скопирован в /usr/lib/cups/backend/pipe и выполнен.

Затем я написал небольшой сценарий, который возьмет переданную ему информацию печати, включая параметры принтера из URI принтера. Этот сценарий выполняет преобразование изображения (для этой задачи TIFF в PDF) при необходимости, а затем отправляет его на фактический принтер.

#!/bin/bash

FILE=${PIPE_BACKEND_ARGV6}

MIME_TYPE=$(file --mime-type "${FILE}" | awk '{print $2}')

if [[ $MIME_TYPE == *tiff ]]
  then
    tiff2pdf -o /tmp/printConv-$$.pdf "$FILE"

    FILE=/tmp/printConv-$$.pdf

    CONV=1

fi

lpr -P "$1" "${FILE}"

if [[ $CONV -eq 1 ]] 
 then
   rm "${FILE}"

fi

Затем я устанавливаю «оберточный» принтер со следующим синтаксисом URI:

pipe:/path/to/cups-wrapper-script?actualPrinterName

Здесь используется внутренний узел канала. Он вызывает скрипт по адресу /path/to/cups-wrapper-script с аргументом acturePrinterName , который используется для указания скрипту, на какой принтер следует отправить задание.

0
28.01.2020, 01:56

Теги

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