Phần mềm in nó sau


12

Đôi khi, khi tôi đang làm việc trên máy tính xách tay của mình, tôi muốn xếp hàng một vài tài liệu để in sau, vì lúc đó tôi không kết nối với máy in.

Tuy nhiên, hàng đợi máy in thực tế không được thiết kế cho việc này; họ ngay lập tức cố gắng in tài liệu, và tất cả đột nhiên bắt đầu in ngay khi tôi vào mạng, đó không phải là điều tôi muốn làm. Hơn nữa, đôi khi tôi muốn thay đổi thứ tự các tài liệu trong hàng đợi, điều này không dễ dàng gì, nhất là khi một số trong số chúng đã bắt đầu in.

Ngoài ra, đôi khi in không thành công vì ví dụ: máy in hết giấy hoặc mực và tôi muốn in lại tài liệu sang máy in khác. Điều này không đơn giản với ví dụ CUPShay system-config-printer; Tôi thường phải quay lại, mở lại trình đọc PDF và bắt đầu lại. Không có trình đọc PDF nào tôi biết cho phép bạn giữ một danh sách các tài liệu để in sau này, nhưng đây có thể là một tính năng ẩn của trình đọc PDF ở đâu đó mà tôi không biết.

Dù sao, đây là những gì tôi muốn có thể làm:

  • Chỉ định danh sách các tệp PDF tôi muốn in.
  • Giữ danh sách đó trên đĩa để tôi có thể đóng ứng dụng hoặc khởi động lại mà không mất toàn bộ danh sách.
  • Chỉ định (các) máy in mà tôi muốn gửi trước cho chúng mà không thực sự được kết nối với các máy in đó vào thời điểm đó.
  • Chỉ định các tùy chọn in như màu, in hai mặt và số lượng bản sao.
  • Thay đổi các bài tập máy in và tùy chọn in sau.
  • Đợi cho đến khi tôi nhấn nút hoặc chạy lệnh để thực sự in (các) tài liệu.
  • Giữ một danh sách riêng các tài liệu đã được in, trong trường hợp in không hoạt động hoặc tôi muốn in lại chúng sau.

Tôi biết tôi có thể hack thứ gì đó cùng với tập lệnh shell lprvà danh sách các đường dẫn trong tệp văn bản, nhưng tôi không thể cảm thấy rằng vấn đề này đã được giải quyết theo cách mạnh mẽ và thanh lịch hơn.

Điểm thưởng:

  • Đừng yêu cầu các tài liệu phải được mở trong trình đọc PDF. Tôi muốn in chúng, không duyệt chúng và không có lý do gì chúng phải là cùng một ứng dụng.
  • Nhiều hơn một danh sách.
  • Cũng hoạt động cho các Postcript, DjVu và các định dạng mô tả trang khác.
  • Kéo và thả từ trình quản lý tệp.

Bất kỳ đề xuất?


Bắt đầu một tiền thưởng nếu bạn có đủ danh tiếng;)
AB

Theo như tôi có thể thấy, điều này sẽ chỉ yêu cầu một sửa đổi đơn giản của hàng đợi máy in như hiện được thực hiện bởi cups. Bạn chỉ cần in vào hàng đợi máy in mong muốn, nhưng đặt công việc máy in ở chế độ "chờ" cho đến khi bạn quyết định "phát hành" chúng. Nút "giữ" là tất cả những gì cần thiết. Hay tôi bỏ lỡ điều gì?
Jos

@Jos Phiên bản của system-config-printer-applettôi cho phép tôi giữ và giải phóng các lệnh in cũng như chuyển chúng sang các máy in khác, nhưng tôi không thể thay đổi thứ tự các lệnh in hoặc thay đổi các tùy chọn in sau khi gửi lệnh. Ngoài ra, vào thời điểm đó, đường dẫn đến tài liệu gốc đã mất từ ​​lâu.
Nathaniel M. Beaver

@AB Thật không may tiền thưởng yêu cầu 75 điểm internet, và tôi là một con trỏ thấp 53.
Nathaniel M. Beaver

Câu trả lời:


10

Những gì tôi làm là như sau --- nó không linh hoạt như bạn yêu cầu, nhưng nó hoạt động gần như ok. Bạn cần phải xác định tất cả các máy in của mình và sau đó bạn cần hai tập lệnh này:

  1. stop_printers:

    #!/bin/bash -f
    #
    allp=(`cat /etc/printcap | tr "|" "\t" | cut -f 1 | grep -v "#"`)
    for i in ${allp[@]}; do 
        echo -n Printer $i:
        cupsdisable "$i"
        echo " " paused.
    done
    
  2. start_printers:

    #!/bin/bash -f
    #
    allp=(`cat /etc/printcap | tr "|" "\t" | cut -f 1 | grep -v "#"`)
    for i in ${allp[@]}; do 
        echo -n Printer $i:
        cupsenable "$i"
        echo " " restarted.
    done
    

Bạn phải đặt chúng vào đường dẫn của bạn (ví dụ ~/bin) và làm cho chúng có thể thực thi được chmod +x. CAVEAT : Tôi không có bất kỳ máy in nào có khoảng trắng trong tên của chúng. Các tập lệnh không được kiểm tra trong trường hợp đó (nhưng tôi chắc chắn rằng một trong những bậc thầy về kịch bản shell của chúng tôi sẽ sửa các tập lệnh trong nháy mắt; -) ...)

Bây giờ, bạn có thể phát hành:

[romano:~] % stop_printers
Printer PDF:  paused.
Printer ColorDEA:  paused.
Printer Deskjet_6980:  paused.
Printer fotocop5:  paused.

Và bạn có thể in từ bất cứ nơi nào bạn muốn, máy in sẽ bị tạm dừng:

máy in từ evince

Bạn có thể thấy hàng đợi của bạn:

[romano:~] % lpq -PDeskjet_6980
Deskjet_6980 is not ready
Rank    Owner   Job     File(s)                         Total Size
1st     romano  439     Bones_3+RG.pdf — Flesh depth  125952 bytes

(AFAIK, hàng đợi in liên tục trong các lần khởi động lại). Và khi bạn muốn in:

[romano:~] % start_printers         
Printer PDF:  restarted.
Printer ColorDEA:  restarted.
Printer Deskjet_6980:  restarted.
Printer fotocop5:  restarted.

Sử dụng lprmbạn có thể loại bỏ một công việc nếu bạn cần; lprđể ghi lại một tài liệu thông qua dòng lệnh và nếu bạn muốn các "danh sách" khác nhau, không ai cấm định nghĩa cùng một máy in nhiều lần với các tên khác nhau.

Bạn cũng có thể tiếp tục mỗi máy in bằng tay, đó chỉ là vấn đề chạy cupsenable <printername>từ dấu nhắc.

Điều tôi không nghĩ rằng bạn có thể làm với giải pháp này là thay đổi các tùy chọn in sau khi thực tế --- bạn sẽ phải xử lý và tái lập tài liệu cho việc này.


2
+1 Tuy nhiên, tốt, trong khi bạn có thể có lý do của mình, việc điền vào mảng của bạn có thể được làm đơn giản hơn bằng cách sử dụng dấu phân cách phù hợp trong cutphần : cat /etc/printcap | cut -d "|" -f 1 | grep -v "#". Bạn tiết kiệm cho mình một số thời gian chu kỳ bằng cách thoát khỏi bản dịch tr. Công việc này miễn là bạn chỉ cần lĩnh vực đầu tiên của bạn.
Cbhihe

1

Gói của tôi (phích cắm không biết xấu hổ), duplexpr thực hiện một số điều bạn muốn và bao gồm các hàm bash có thể hữu ích trong việc cuộn phiên bản của riêng bạn. (Nó được mã hóa bằng bash, vì vậy nó sẽ tương đối dễ sửa đổi và tôi sẽ giúp nếu tôi có thể.)

Nó được thiết kế để mô phỏng in hai mặt trên máy in không in hai mặt và thực hiện quản lý hàng đợi in đơn giản của riêng nó. Nó có cả giao diện gui và cli.

Phiên bản hiện tại chỉ in in hai mặt và chỉ hoạt động với máy in không in hai mặt, nhưng phiên bản mới đang hoạt động sẽ xử lý các máy in có phần cứng song công, về cơ bản chỉ là máy in và quản lý hàng đợi mà không có phần mềm mô phỏng song công. (Tôi có sẵn phiên bản alpha của tập lệnh đã hoạt động nếu có ai muốn liên hệ trực tiếp với tôi qua dự án, v.v.)

Hệ thống in ra máy in mặc định hiện tại, nhưng tập lệnh dplx và duplex chấp nhận các đối số bổ sung được truyền cho lp và có thể được sử dụng để đặt bất kỳ tùy chọn nào mà lp hiểu như máy in và các thuộc tính khác.

Hệ thống hiện đang xử lý các tệp PDF, PostScript và văn bản thuần túy.

Một điều nó sẽ không làm là in các tệp được tạo bằng tùy chọn In thành tệp từ bên trong Acroread. Những tệp đó không hoạt động với lp và tôi chưa bao giờ có thể nhận được sự chú ý của bất kỳ người dân thượng lưu nào để tìm ra vấn đề là gì.

Cá nhân, tôi in hầu hết mọi thứ "ngoại tuyến" (sử dụng tùy chọn In thành tệp mà hầu hết các ứng dụng hỗ trợ) ngay cả khi máy in của tôi có sẵn. Nó giúp tôi tập trung vào những gì tôi đang làm. Sau này, khi tôi đạt đến một điểm dừng phù hợp, tôi in hàng loạt công việc.

Có một hàng đợi in cũng thực sự tốt khi bạn muốn in một bản sao khác của một thứ gì đó mà không phải tạo lại nó và nó rất cần thiết để xử lý các lỗi máy in như kẹt giấy hoặc hết mực.


Đó là một gói thú vị, nhưng có vẻ như nó có một vài cạnh gồ ghề ngay bây giờ và tôi không chắc mình có thể sửa nó nếu có sự cố. Nhân tiện, bạn đã xem xét việc tải nó lên Github chưa?
Nathaniel M. Beaver

@bariumbitmap - Tôi đã sử dụng nó hàng ngày trong hơn 10 năm (kể từ lần đầu tiên tôi viết nó). Nó ổn định. Tôi cũng có một phiên bản mới trong phát triển. Nếu bạn phá vỡ nó hoặc cần các tính năng bổ sung và sẵn sàng làm việc với tôi, tôi sẽ sửa nó. Tôi vẫn chưa học git, vì vậy tôi sử dụng github tối thiểu. Sourceforge rất nổi tiếng.
Joe

0

Dường như không có một giải pháp hoàn chỉnh cho vấn đề này, nhưng đây là một chức năng tôi đã thêm vào .bashrctương tự như câu trả lời của Rmano ở trên, với sự tiện lợi bổ sung của tự động hoàn thành.

all-printers() {
    if [ "$*" = "" ]
    then
        # Print usage."
        printf "Usage:\n"
        printf "all-printers start\n"
        printf "all-printers stop\n"
        return 1
    elif ! [ "$1" = "stop" -o "$1" = "start" ]
    then
        printf "Unrecognized command: $1\n"
        return 1
    fi

    cut -f 1 -d '|' /etc/printcap |
    grep -v '^#' |
    while read printer_name
    do 
        if [ "$1" = "stop" ]
        then
            cupsdisable "$printer_name"
            printf "$printer_name stopped.\n"
        elif [ "$1" = "start" ]
        then
            cupsenable "$printer_name"
            printf "$printer_name started.\n"
        fi
    done
}
complete -W 'stop start' all-printers
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.