Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 23, 2015 01:36:25

Vady
Зарегистрирован: 2015-05-30
Сообщения: 70
Репутация: +  0  -
Профиль   Отправить e-mail  

Выбор принтера для печати. Linux

Столкнулся с такой проблемой: есть в сети несколько принтеров, пользователи работают в терминальном режиме, поэтому на сервере настроены несколько принтеров.
1-й принтер обозначен как “общесистемный” по умолчанию.
2-й принтер обозначен как по умолчанию “для текущего пользователя”.
Вот запускаю LibreOffice, там по умолчанию стоит второй принтер, что есть правильно.
Запускаю свою программу на питоне, почему-то каждый раз выбирает первый. Как вызвать принтер по умолчанию для текущего пользователя?

Офлайн

#2 Июнь 24, 2015 01:27:48

Vady
Зарегистрирован: 2015-05-30
Сообщения: 70
Репутация: +  0  -
Профиль   Отправить e-mail  

Выбор принтера для печати. Linux

Может, надо где-то в переменных окружения настраивать? Python, Qt, PyQt собраны из исходников.

Офлайн

#3 Июнь 24, 2015 02:02:36

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Выбор принтера для печати. Linux

void QPrinter::setPrinterName ( const QString & name )



Офлайн

#4 Июнь 24, 2015 07:47:59

Vady
Зарегистрирован: 2015-05-30
Сообщения: 70
Репутация: +  0  -
Профиль   Отправить e-mail  

Выбор принтера для печати. Linux

py.user.next
Задачка выглядит так: есть терминальный сервер. И множество пользователей. У каждого пользователя свой принтер.
Ivanov - PrinterHP1
Petrov - PrinterHP2
Sidorov - PrinterXerox1
Общесистемный по умолчанию - PrinterHP1. По умолчанию для каждого пользователя - согласно таблицы выше.
И часто принтеры и “тонкие клиенты” меняем в случае поломки. Выбранный принтер должен зависеть только от системных настроек.

Офлайн

#5 Июнь 24, 2015 08:53:48

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Выбор принтера для печати. Linux

#!/usr/bin/env python3
 
from PyQt4 import QtGui
import sys
 
class Window(QtGui.QWidget):
 
    def __init__(self):
        super().__init__()
        self.init_ui()
 
    def init_ui(self):
 
        p = QtGui.QPrinter()
        print(p.printerName())
        print(p.isValid())
 
        p.setPrinterName('x')
        print(p.printerName())
        print(p.isValid())
 
        self.setGeometry(800, 550, 250, 150)
        self.setWindowTitle('Title')
        self.show()
 
def main():
    app = QtGui.QApplication(sys.argv)
    ex = Window()
    sys.exit(app.exec_())
 
if __name__ == '__main__':
    main()

[guest@localhost examples]$ ./t.py 
Deskjet-F4200-series
True
x
False
[guest@localhost examples]$

Попробуй поменять просто, чтобы определить, меняются ли они вообще.

Vady
Вот запускаю LibreOffice, там по умолчанию стоит второй принтер, что есть правильно.
А где гарантия, что он не был выставлен до этого?
Открой редактор, в котором точно ничего не печатал, и там запусти и посмотри, какой принтер выдаёт по умолчанию.



Отредактировано py.user.next (Июнь 24, 2015 08:55:49)

Офлайн

#6 Июнь 25, 2015 00:51:35

Vady
Зарегистрирован: 2015-05-30
Сообщения: 70
Репутация: +  0  -
Профиль   Отправить e-mail  

Выбор принтера для печати. Linux

Запустил с заголовком:

#!/usr/bin/env python
Получил:
$ ./printer.py
Brother-HL-2035-2
True
x
False
Выбран нужный принтер! Операционная система - АльтЛинукс 6.0, родной питон - 2,6

Запустил с заголовком:
#!/usr/bin/env /usr/local/bin/python
Получил:
$ ./printer.py
Brother-HL-2035
True
x
False
Выбран не тот принтер. Питон - 2.7, причем не родной, а собран из исходников. И Qt4 тоже, с более новой версией.
Как исправить? Искать в переменных окружения или надо пересобирать питон с каким-то ключом?

Офлайн

#7 Июнь 25, 2015 04:09:45

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Выбор принтера для печати. Linux

http://qt.developpez.com/doc/3.2/qprinter/

void QPrinter::setPrinterName ( const QString & name )
Sets the printer name to name.

The default printer will be used if no printer name is set.

Under X11, the PRINTER environment variable defines the default printer. Under any other window system, the window system defines the default printer.

Попробуй PRINTER прочитать/установить.



Офлайн

#8 Июнь 25, 2015 08:09:39

Vady
Зарегистрирован: 2015-05-30
Сообщения: 70
Репутация: +  0  -
Профиль   Отправить e-mail  

Выбор принтера для печати. Linux

py.user.next
Попробуй PRINTER прочитать/установить.
Как и где?

Офлайн

#9 Июнь 25, 2015 08:28:27

romanlazarev
Зарегистрирован: 2015-06-25
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Выбор принтера для печати. Linux

читать:

echo $PRINTER
env | grep PRINTER

устанавливать:
 export PRINTER="Brother-HL-2035-2"

В данном случае подразумевается, что переменная PRINTER является переменной окружения (environment variable) в Вашей оболочке (Bash, sh, etc).

Офлайн

#10 Июнь 25, 2015 14:37:43

Vady
Зарегистрирован: 2015-05-30
Сообщения: 70
Репутация: +  0  -
Профиль   Отправить e-mail  

Выбор принтера для печати. Linux

echo $PRINTER
Ничего не выводит.

А в:
export PRINTER=“Brother-HL-2035-2”
смысл какой? Система многопользовательская, у каждого пользователя - свой принтер, настраиваемый на уровне системы.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version