Как автоматически изменить принтер по умолчанию в зависимости от подключенной сети?

Хотя я почти ничего не знал о том, как реализована локализация в Linux, я изо всех сил пытался разобраться в этом.

Краткое описание

/usr/lib/locale/locale-archive

locale-archive - это файл с привязкой к памяти, который создается locale-gen(8), вызывая localedef(1). Memory-mapped означает, что после создания и вызова программой он загружается в память только один раз.
Поскольку все языковые наборы, определенные в /etc/locale.gen, предопределены, а сам архив очень статичен, нет необходимости держать его в памяти несколько раз. Таким образом, каждый раз, когда к нему обращается другая программа, процесс получает указание на уже загруженный в память архив, что только увеличивает виртуальную память программы. Таким образом, не только уменьшается объем физической памяти процесса, но и ускоряются все системные операции, связанные с локализацией. (не требуется дополнительных дисковых операций ввода-вывода!)

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


/usr/share/locale/$LOCALE_DIR/LC_MESSAGES/$PROGRAM.mo

Интернационализация (i18n, 18 символов между 'i' и 'n') программ в Linux может быть достигнута с помощью GNU-gettext.

  1. Когда программа написана, каждый оператор печати адаптируется для использования функции GNUs gettext(), обертывающей строку, которую нужно напечатать.
  2. Затем xgettext(1) выполняет итерации по исходному тексту, создавая по пути .pot (Portable Object Template Files).
  3. Человеческий переводчик может затем использовать msginit(1), чтобы разобрать его на .po (Portable Object) файлы, обычно представляющие каталог сообщений. Затем все строки переводятся вручную.
  4. После этого msgfmt(1) используется для компиляции отредактированного .po файла в двоичные .mo (Message Object) файлы. Они могут быть отправлены вместе с пакетом программного обеспечения.

При установке пакета в систему, /usr/share/locale//LC_MESSAGES/ заполняется файлами $PROGRAM.mo. Когда, например, вызывается wget, ваша env-переменная LANG будет указывать wget на использование вашей текущей локальной настройки, что приводит к тому, что wget включает нужные прекомпилированные переводы через указатели в бинарные файлы read .mo.

Дополнительные детали и источники

Для locale-archive:

Memory-mapping: CentOS-Mailing-List
Методы I18N-подпаковки: Документация Fedora по различным компиляциям locale-archive

Также рассмотрите руководства для locale(1), localedef(1) и locale-gen(8).

Для файлов .mo:

Процесс создания файлов .mo: Википедия на Gettext
GNU MO File Format: объяснение и двоичный формат

Также рассмотрите manpages для xgettext(1), msginit(1) и msgfmt(1).

Также посмотрите на переменные ENV LC_MESSAGE и LOCPATH.


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

2
17.11.2016, 16:55
2 ответа

Если у вас установлены оба принтера (вы можете установить только один по умолчанию), вы можете изменить принтер по умолчанию при подключении принтера.

Зайдите в настройки и нажмите на принтеры. Щелкните правой кнопкой мыши принтер, который хотите установить по умолчанию. установить значение по умолчанию. это должно работать, но вы должны делать это каждый раз при смене принтера.

-3
27.01.2020, 23:10

Я сделал небольшой проект , используя Bash, который создает различные профили принтеров на основе подключенного монитора. Моя система работает, хотя и по неправильной причине :, вместо того, чтобы смотреть на доступную сеть или принтеры, она срабатывает, если вы подключаете другой монитор на работе и дома.

Он основан на этой переписанной Python версии autorandr , которая выбирает соответствующую конфигурацию дисплея в зависимости от подключенных устройств.

Чтобы установить мой проект, откройте терминал и введите следующее:

sudo apt install autorandr
mkdir -p ~/.config/autorandr && cd ~/.config/autorandr
git clone https://github.com/Noughtnaut/noughty-autorandr.git
autorandr -s some_name_here

Это то, что делают вышеприведенные четыре команды:

  1. Устанавливает пакет autorandr, который автоматически запускается всякий раз, когда вы (отсоединяете )дисплей. Если вы предпочитаете, вы также можете сделать это с помощью графического менеджера программного обеспечения.
  2. Создает папку для локальной конфигурации программы и переходит к ней.
  3. Загружает мое дополнение -, которое управляет настройками принтера по умолчанию. Важно, чтобы это делалось внутри папки ~/.config/autorandr.
  4. Сохраняет текущую настройку --, включая настройку принтера по умолчанию.

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

Отныне ваш ноутбук будет автоматически менять принтер по умолчанию в зависимости от того, к какому монитору вы подключены.

3
21.11.2020, 23:12

Теги

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