Skip to content


Настройка печати через RDP с WIN-сервера на Linux-клиент

Несмотря на то, что настройка печати с Windows-машин на линукс несложная и подробно описана, тем не менее печать по протоколу IPP через CUPS имеет существенный недостаток – размер задания при печати некоторых документов, особенно изображений, может увеличиваться до неприличных величин. Также помогает решить проблему невозможности проброса принтера через RDP. Поэтому предлагается способ настройки печати через виртуальный PDF- принтер. У этого способа есть один недостаток – Windows-машина вообще не имеет представления о принтере, который установлен в линукс, соответственно, специальные возможности печати для данного принтера будут недоступны. Ниже представлена инструкция по настройке данного способа печати.

  1. Создать в папке пользователя каталог .pdftemp. Здесь будут появляться файлы для печати. Обратить внимание на точку перед названием. Это будет скрытый каталог.
  2. Создать в папке .pdftemp каталог conf.
  3. Создать в папке conf текстовый файл (скрипт). Название pdftoprint.sh. Содержание:
    1. #!/bin/sh
    2.  
    3. DIR="$HOME/.pdftemp/"
    4. ERR_LOG="$DIR/conf/err.log"
    5. PFILE="$DIR/$1"
    6. if  lp "$PFILE" ; then rm "$PFILE"
    7.  else echo "Unable to print \"$PFILE\"" >> "$ERR_LOG"
    8. fi
    9. exit 0

    Сохранить. Сделать запускаемым.

  4. Установить incron, cups, cups-pdf, system-config-printer.
  5. Добавить пользователя в группу incron.
  6. Отредактировать файл /etc/incron.allow — вписать имя пользователя.
  7. Добавить задание для incron.
    1.  incrontab -e
    2.  
    3.  /home/[user]/.pdftemp IN_CLOSE_WRITE /home/[user]/.pdftemp/conf/pdftoprint.sh $#

    где [user] – это имя пользователя.

  8. проверить, что задание было добавлено
    1. incrontab -l
  9. Перезапустить демон incron.
    1. sudo incrond restart
  10. Установить и настроить все необходимые для работы принтеры. Убедиться в их нормальной работе.
  11. Должен быть установлен 2XClient. Ссылка на страницу для скачивания: http://www.2x.com/rdp-client/downloadlinks/
    Примечание: Можно использовать любой другой клиент RDP, но, по личному опыту, только 2XClient обеспечивает устойчивый проброс файловой системы внутри сессии RDP. Также, в процессе эксплуатации в офисе, никаких глюков у этого клиента выявлено не было.
  12. Настроить подключение через RDP. Обязательно разрешить проброс диска sda1 (Disk drives).
  13. На сервере должен быть установлен PDF-принтер (Adobe PDF, Foxit PDF Creator и т. п.).
  14. В настройках принтера установить печать без запроса на папку \\tsclient\sda1\home\[user]\.pdftemp — это папка, созданная в пункте 1. Снять, если есть, галку на «открывать после печати».
  15. Проверка имени принтера по умолчанию
    1. lpstat -d

    Установка принтера по умолчанию

    1. lpoptions -d [имя_принтера]
  16. Для удобства пользователя вывести на рабочий стол кнопку запуска программы system-config-printer для оперативного изменения принтера по умолчанию. Заранее установить требуемый принтер.
  17. Обратить внимание!! Печать происходит только на принтер по умолчанию.

    Если всё сделано правильно, при печати на сервере на PDF-принтер по окончании формирования файла PDF печать пойдёт на выбранный принтер.

    Если печать производится в рамках одной сети или есть непосредственный доступ по сети к данному компьютеру, например, через туннель, то рекомендуется расшарить папку печати через Samba и производить печать в эту расшаренную папку. Связано с тем, что доступ по сети в такую папку производится быстрее и скорость ограничена только внешними условиями, тогда как через канал внутри сеанса RDP эта скорость ограничена. Кроме этого появляется возможность такого способа печати (не через IPP), для других пользователей в сети.

    Автор: Олег Белоусов.
    skype: p_orinoko

Размещено в категории *nix, Howto, Windows. Теги: , , , .

Суперкопилка: интересный вариант для накопления денег

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

Суть: делаете вклад (минимальная сумма не ограничена), через некоторое время (обычно 16-18 недель) получаете свой вклад назад плюс 50% сверху. Любой, кто дружит с математикой, поймёт, что это в разы интереснее банковских депозитов (даже с учетом того, что в Украине очень высокие процентные ставки по ним по сравнению с той же Европой). Вклады и выплаты делаются с помощью электронных валют, конвертация в которые доступна через множество обменников.

Мои результаты пока весьма радуют:

Результаты за год участия

Закрытые вклады

Здесь видно, что суммарно было вложено $3319.68, а получено - $4804. Профит - $1484.32. Неплохая прибавка к пенсии :) Это при том, что у меня довольно консервативная стратегия. А некоторые уже накопили ну очень приличные суммы (знаю лично человека, который на машину насобирал с помощью данного инструмента).

Плюсы проекта:

  • Приличная доходность (но в то же время не заоблачная, как в других похожих проектах)
  • Нет критической зависимости от притока новых участников (за счет строго обязательных еженедельных взносов)
  • Нет возможности забрать свой вклад в любой момент (а только после истечения срока его действия, который произвольно выбирается участником при создании вклада)
  • Сравнительно большой срок стабильной работы проекта (уже 2,5 года на данный момент)
  • Нет необходимости сообщать реальные персональные данные и предоствлять какие-либо документы, удостоверяющие личность (нужно указать только действующий email и номер телефона)
  • Защита сбережений от обесценивания национальных валют, так как внутренний учет накоплений идет в долларах (особенно актуально для жителей Украины и России)
  • Есть возможность строить самые разнообразные стратегии участия, подбирая под себя соотношение срок/доходность (более длинные вклады, естественно, имеют повышенную доходность)

Это хорошая возможность накопить денег на давно желанную крупную покупку, путешествие или праздник.

Кому не подойдет:

  • Если у Вас денег не хватает на еду и другие базовые потребности (такие как жилье, транспорт, одежда)
  • Если Вы регулярно берёте потребительские кредиты и есть проблемы с их возвратом

Кому рекомендую:

  • Если у Вас денег достаточно и даже есть немного "лишние", которые болтаются почти без дела на картах или банковских депозитах
  • Тем, кто понимает необходимость создания множественных источников дохода

Официальная презентация

Статистика за последнюю неделю

Что происходило в СК на 131-й неделе

Статистика суперкопилки 131 -ой недели

Вклады в проекте называются "целями". Внутренняя "валюта" - тета, эквивалент доллара США.

UPDATE от 2015-12-28: Моя статистика по закрытым целям за срок в 14 месяцев уже выглядит вот так – вложено $5969.75, получено $8273.90. Профит – $2304.15.

Размещено в категории Деньги.

Ошибка mysql: Got fatal error 1236 from master

После аварийного рестарта mysql-сервера, исполняющего роль master-а, на slave-е вылезла вот такая проблемка:

[ERROR] Slave I/O: Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from position > file size', Error_code: 1236

Ну и процесс репликации, естественно, остановился.

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

Смотрим позицию, до которой дошел slave:

  1. [slave]$ echo "show slave status \G" | mysql | grep -E "[[:space:]]Master_Log_File|Read_Master_Log_Pos"
  2.   Master_Log_File: s10-bin.000253
  3.   Exec_Master_Log_Pos: 783374391

Смотрим последнюю позицию, которая реально присутствует в этом бинлоге мастера:

  1. [master]$ mysqlbinlog s10-bin.000253 | tail -n 9
  2. /*!*/;
  3. # at 783367615
  4. #150704 18:12:45 server id 62 end_log_pos 783367646 CRC32 0x2be04f67 Xid = 22088173
  5. COMMIT/*!*/;
  6. DELIMITER ;
  7. # End of log file
  8. ROLLBACK /* added by mysqlbinlog */;
  9. /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
  10. /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

И видим, что последняя позиция - 783367646. В то время как slave пытается исполнить позицию 783374391, которая, очевидно, дальше, чем 783367646. Вывод – надо "отмотать" slave немного назад:

  1. [slave] mysql> stop slave;
  2. [slave] mysql> change master to master_log_pos=783367646;
  3. [slave] mysql> start slave;

В логе видим:

  1. [Note] 'CHANGE MASTER TO executed'. Previous state master_host='10.10.10.10', master_port= 3306, master_log_file='s10-bin.000253', master_log_pos=783374391, master_bind=''. New state master_host='10.10.10.10', master_port= 3306, master_log_file='s10-bin.000253', master_log_pos=783367646, master_bind=''.
  2. [Note] Slave I/O thread: connected to master 'repl@10.10.10.10:3306',replication started in log 's10-bin.000253' at position 783367646

Ну и далее show slave status нам говорит, что slave начал догонять master.

Happy end.

P.S. Альтерантивным вариантом посмотреть бинлог является команда SHOW BINLOG EVENTS. Например:

  1. mysql> SHOW binlog events IN 's9-bin.000125' FROM 24084942 LIMIT 10;
  2. +---------------+----------+-------------+-----------+-------------+------------------+
  3. | Log_name      | Pos      | Event_type  | Server_id | End_log_pos | Info             |
  4. +---------------+----------+-------------+-----------+-------------+------------------+
  5. | s9-bin.000125 | 24084942 | Write_rows  |         8 |    24085025 | table_id: 244461 |
  6. | s9-bin.000125 | 24085025 | Update_rows |         8 |    24086045 | table_id: 244461 |
  7. | s9-bin.000125 | 24086045 | Write_rows  |         8 |    24086128 | table_id: 244461 |
  8. | s9-bin.000125 | 24086128 | Update_rows |         8 |    24086518 | table_id: 244461 |
  9. | s9-bin.000125 | 24086518 | Write_rows  |         8 |    24086600 | table_id: 244461 |
  10. | s9-bin.000125 | 24086600 | Update_rows |         8 |    24086876 | table_id: 244461 |
  11. | s9-bin.000125 | 24086876 | Write_rows  |         8 |    24087008 | table_id: 244461 |
  12. | s9-bin.000125 | 24087008 | Update_rows |         8 |    24087138 | table_id: 244461 |
  13. | s9-bin.000125 | 24087138 | Write_rows  |         8 |    24087221 | table_id: 244461 |
  14. | s9-bin.000125 | 24087221 | Update_rows |         8 |    24087611 | table_id: 244461 |
  15. +---------------+----------+-------------+-----------+-------------+------------------+
  16. 10 rows IN SET (0.00 sec)

Размещено в категории Howto. Теги: , .

Как получить список всех IPv4-сетей автономной системы

Описание алгоритма решения задачи "получить список всех сетей организации, если известен один IP-адрес".

1. Забиваем в гугл запрос "show ip bgp regex looking glass", находим какой-нибудь looking glass, поддерживающий команду "show ip bgp regex" и не обрезающий вывод. Например lg.as48972.net

2. Выясняем номер автономной системы с помощью команды whois или на каком-нибудь веб-сервисе. Для примера возьмем IP-адрес 46.219.4.0 одного из киевских провайдеров:

  1. $ whois 46.219.4.0 | grep origin
  2. origin:         AS31148

Итак, номер автономной системы провайдера Freenet (O3) - 31148.

3. Далее идем на найденный looking glass и в качестве аргумента указываем номер AS со знаком доллара на конце (если знак доллара не указать, то отобразятся еще и сети организаций, для которых AS 31148 является транзитной, что нам в данном случае не нужно):

Поиск всех префиксов заданной AS

Как найти все блоки адресов, принадлежащие организации

4. Жмем кнопку "Execute" и получаем длинный список примерно такого вида (приведен не полностью), где в самом левом столбце и перечислены искомые блоки адресов:

  1. BGP table version is 0, local router ID is 95.130.232.4
  2. Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
  3.               r RIB-failure, S Stale, R Removed
  4. Origin codes: i - IGP, e - EGP, ? - incomplete
  5.  
  6.    Network          Next Hop            Metric LocPrf Weight Path
  7. * i46.219.1.0/24    77.222.66.181                  90      0 16243 21219 31148 i
  8. *>i                 77.222.66.177                  90      0 16243 21219 31148 i
  9. * i46.219.2.0/24    77.222.66.181                  90      0 16243 21219 31148 i
  10. *>i                 77.222.66.177                  90      0 16243 21219 31148 i
  11. * i46.219.3.0/24    77.222.66.181                  90      0 16243 21219 31148 i
  12. *>i                 77.222.66.177                  90      0 16243 21219 31148 i
  13. * i46.219.4.0/24    77.222.66.181                  90      0 16243 21219 31148 i
  14. *>i                 77.222.66.177                  90      0 16243 21219 31148 i
  15. * i46.219.5.0/24    77.222.66.181                  90      0 16243 21219 31148 i
  16. *>i                 77.222.66.177                  90      0 16243 21219 31148 i
  17. *>i46.219.6.0/24    77.222.66.177                  90      0 16243 21219 31148 i
  18. * i                 77.222.66.181                  90      0 16243 21219 31148 i
  19. * i46.219.7.0/24    77.222.66.181                  90      0 16243 21219 31148 i
  20. *>i                 77.222.66.177                  90      0 16243 21219 31148 i
  21. * i46.219.8.0/24    77.222.66.181                  90      0 16243 21219 31148 i
  22. *>i                 77.222.66.177                  90      0 16243 21219 31148 i
  23. * i46.219.9.0/24    77.222.66.181                  90      0 16243 21219 31148 i
  24. *>i                 77.222.66.177                  90      0 16243 21219 31148 i
  25. * i46.219.10.0/24   77.222.66.181                  90      0 16243 21219 31148 i
  26. *>i                 77.222.66.177                  90      0 16243 21219 31148 i
  27. * i46.219.11.0/24   77.222.66.181                  90      0 16243 21219 31148 i
  28. *>i                 77.222.66.177                  90      0 16243 21219 31148 i
  29. * i46.219.12.0/24   77.222.66.181                  90      0 16243 21011 31148 i
  30. *>i                 77.222.66.177                  90      0 16243 21011 31148 i
  31. * i46.219.13.0/24   77.222.66.181                  90      0 16243 21219 31148 i
  32. *>i                 77.222.66.177                  90      0 16243 21219 31148 i
  33. * i46.219.14.0/24   77.222.66.181                  90      0 16243 21011 31148 i
  34. *>i                 77.222.66.177                  90      0 16243 21011 31148 i
  35. * i46.219.15.0/24   77.222.66.181                  90      0 16243 21219 31148 i
  36. *>i                 77.222.66.177                  90      0 16243 21219 31148 i
  37. * i46.219.16.0/24   77.222.66.181                  90      0 16243 21219 31148 i
  38. *>i                 77.222.66.177                  90      0 16243 21219 31148 i
  39. * i46.219.17.0/24   77.222.66.181                  90      0 16243 21011 31148 i
  40. *>i                 77.222.66.177                  90      0 16243 21011 31148 i
  41. * i46.219.18.0/24   77.222.66.181                  90      0 16243 21219 31148 i
  42. *>i                 77.222.66.177                  90      0 16243 21219 31148 i
  43. * i46.219.19.0/24   77.222.66.181                  90      0 16243 21219 31148 i
  44. *>i                 77.222.66.177                  90      0 16243 21219 31148 i
  45. * i46.219.20.0/24   77.222.66.181                  90      0 16243 15772 28761 31148 i
  46. *>i                 77.222.66.177                  90      0 16243 15772 28761 31148 i
  47. * i46.219.21.0/24   77.222.66.181                  90      0 16243 21219 31148 i
  48. *>i                 77.222.66.177                  90      0 16243 21219 31148 i
  49. * i46.219.22.0/24   77.222.66.181                  90      0 16243 21219 31148 i
  50. *>i                 77.222.66.177                  90      0 16243 21219 31148 i
  51. * i46.219.23.0/24   77.222.66.181                  90      0 16243 21011 31148 i

Если номер AS четрыхзначный, то может потребоваться поиграться с аргументом запроса, добавив экранированный обратным слешем пробел пред номером AS. То есть вписать в поле нечто такое: "\ 31148$" (чтобы не отображались те автономные системы, номер которых содержит номер нашей как подстроку).

Размещено в категории Howto. Теги: .