Найти - Пользователи
Полная версия: Выбор принтера для печати. Linux
Начало » Python для новичков » Выбор принтера для печати. Linux
1 2
Vady
Столкнулся с такой проблемой: есть в сети несколько принтеров, пользователи работают в терминальном режиме, поэтому на сервере настроены несколько принтеров.
1-й принтер обозначен как “общесистемный” по умолчанию.
2-й принтер обозначен как по умолчанию “для текущего пользователя”.
Вот запускаю LibreOffice, там по умолчанию стоит второй принтер, что есть правильно.
Запускаю свою программу на питоне, почему-то каждый раз выбирает первый. Как вызвать принтер по умолчанию для текущего пользователя?
Vady
Может, надо где-то в переменных окружения настраивать? Python, Qt, PyQt собраны из исходников.
py.user.next
void QPrinter::setPrinterName ( const QString & name )
Vady
py.user.next
Задачка выглядит так: есть терминальный сервер. И множество пользователей. У каждого пользователя свой принтер.
Ivanov - PrinterHP1
Petrov - PrinterHP2
Sidorov - PrinterXerox1
Общесистемный по умолчанию - PrinterHP1. По умолчанию для каждого пользователя - согласно таблицы выше.
И часто принтеры и “тонкие клиенты” меняем в случае поломки. Выбранный принтер должен зависеть только от системных настроек.
py.user.next
#!/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, там по умолчанию стоит второй принтер, что есть правильно.
А где гарантия, что он не был выставлен до этого?
Открой редактор, в котором точно ничего не печатал, и там запусти и посмотри, какой принтер выдаёт по умолчанию.
Vady
Запустил с заголовком:
#!/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 тоже, с более новой версией.
Как исправить? Искать в переменных окружения или надо пересобирать питон с каким-то ключом?
py.user.next
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 прочитать/установить.
Vady
py.user.next
Попробуй PRINTER прочитать/установить.
Как и где?
romanlazarev
читать:
echo $PRINTER
env | grep PRINTER

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

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

А в:
export PRINTER=“Brother-HL-2035-2”
смысл какой? Система многопользовательская, у каждого пользователя - свой принтер, настраиваемый на уровне системы.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB