Open main menu

OpenVZ Virtuozzo Containers Wiki β

Editing USB Printing in VE

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision Your text
Line 3: Line 3:
 
Please note that ownership/permission/devices are referred to my system and you have to adapt to YOUR configuration: they are reported only as an EXAMPLE.
 
Please note that ownership/permission/devices are referred to my system and you have to adapt to YOUR configuration: they are reported only as an EXAMPLE.
  
* Install '''usbutils''' in both HN and VE.  
+
* Install usbutils in both HN and VE.  
 
* In a shell on HN type '''lsusb''' and you'll get the list fo the usb devices on your system:
 
* In a shell on HN type '''lsusb''' and you'll get the list fo the usb devices on your system:
 
   Bus 002 Device 006: ID 0dda:2026 Integrated Circuit Solution, Inc. USB2.0 Card Reader
 
   Bus 002 Device 006: ID 0dda:2026 Integrated Circuit Solution, Inc. USB2.0 Card Reader
Line 27: Line 27:
 
** a '''printer inside''' the /dev/usb directory: <code>crw-rw---- 1 root lp 180, 0 Nov 28 14:14 lp0</code>
 
** a '''printer inside''' the /dev/usb directory: <code>crw-rw---- 1 root lp 180, 0 Nov 28 14:14 lp0</code>
 
** a '''bus/usb''' directory
 
** a '''bus/usb''' directory
** '''many directories''' in bus/usb: named with the bus number that you got with the first lsusb command. In this example the relevant one is '''008'''
+
** '''many directories''' in bus/usb: named with the bus numer that you get with the first lsusb command. In this example the relevant one is '''008'''
 
** in the numbered subdirectory '''1 file for every usb device attached to this bus''', the first one is the usb port:
 
** in the numbered subdirectory '''1 file for every usb device attached to this bus''', the first one is the usb port:
 
***<code>crw-rw-r--  1 root usb  189, 896 Nov 24 16:16 001</code>
 
***<code>crw-rw-r--  1 root usb  189, 896 Nov 24 16:16 001</code>
***<code>crw-rw-r--  1 root usb  189, 900 Nov 28 14:14 005</code>
+
***<code>crw-rw-r--  1 root usb  189, 902 Nov 28 14:14 007</code>
* Now that you have an idea of the general structure of your usb devices you have to replicate them on your VE.
+
* Now that you have an idea fo the general structure of your usb devices you have to replicate them on your VE.
** enter your VE: <code>vzctl enter VE_NUMBER</code>
 
 
** create in /dev (if not present) the usb directory
 
** create in /dev (if not present) the usb directory
 
** create in /dev/usb the printer device typing: <code>mknod lp0 c 180 0</code>
 
** create in /dev/usb the printer device typing: <code>mknod lp0 c 180 0</code>
Line 38: Line 37:
 
**** <code>chown root:lp lp0</code>
 
**** <code>chown root:lp lp0</code>
 
**** <code>chmod 660 lp0 </code>
 
**** <code>chmod 660 lp0 </code>
**** check with <code>ls -l lp0</code> if the new device is '''IDENTICAL''' to the one in HN --> <code>crw-rw---- 1 root lp 180, 0 Nov 27 13:51 lp0</code>
+
**** check with <code>ls -l lp0</code> if the new device is '''IDENTICAL''' to the one in HN --> <code>crw-rw---- 1 root lp 180, 0 Nov 28 14:14 lp0</code>
** go back to /dev and create a symlink to the printer device: <code>ln -s /dev/usb/lp0 /dev/usblp0</code>
 
** create all the needed directories:
 
*** <code>mkdir /dev/bus</code>
 
*** <code>mkdir /dev/bus/usb</code>
 
*** <code>mkdir /dev/bus/usb/008</code>
 
** switch to /dev/bus/usb/008 directory and create there the needed devices: one for the usb port and one for the printer
 
*** <code>mknod 001 c 189 896</code>
 
*** <code>mknod 005 c 189 900</code>
 
** assign ownership/permissions:
 
*** <code>chown root:usb *</code>
 
*** <code>chmod 664 * </code>
 
*** check everything: <code>ls -l</code> should give the same results as in HN:
 
***<code>crw-rw-r--  1 root usb  189, 896 Nov 27 13:29 001</code>
 
***<code>crw-rw-r--  1 root usb  189, 900 Nov 27 13:30 005</code>
 
* '''Doublecheck everything!'''
 
* Now edit your VE_NUMBER.conf adding this line: <code>DEVICES="c:180:0:rw c:189:896:rw c:189:900:rw"</code>
 
** These are the devices replicated in the VE with mknod.
 
* Almost there: restart your VE and enter it.
 
* In VE type: <code>lsusb</code> and you should see the two devices created before:
 
  Bus 008 Device 005: ID 04b8:0005 Seiko Epson Corp. Stylus Printer
 
  Bus 008 Device 001: ID 1d6b:0001
 
* If not '''RECHECK''' everything.
 
* Start cups and access it via your browser
 
* You should be able to see the printer attached to the usb port
 
 
 
== Sample bash shell script for compute vzctl command for dynamically assigning some devices to one VZ ==
 
Be care, the command <code>vzctl set xxx --devices "dddd" --devnodes "nnnn" --save</code> will reassign
 
the entire list of devices shared to one VZ, even suppressing some already presents.
 
<code>
 
  #!/bin/bash
 
  VZ=1234
 
  DEVICES="[bB]luetooth|[pP]rinter"
 
 
 
  VZDEV=""
 
  VZNOD=""
 
 
 
  while read A B C D E;do
 
    if [[ "$E" =~ (${DEVICES}) ]] ;then
 
        BUS=${B#0} DEV=${D%:}
 
        BUS=${B#0} DEV=${DEV#0}
 
        DEV=${DEV#0}
 
        VZDEV="$VZDEV c:189:$(((BUS-1)*128+DEV-1)):rw"
 
        VZNOD="$VZNOD bus/usb/$B/${D}rw"
 
        fi
 
    done < <(lsusb)
 
 
 
  printf "DEVICES=\"%s\"\n" "${VZDEV# }"
 
  printf "DEVNODES=\"%s\"\n" "${VZNOD# }"
 
  printf "vzctl set %d --devices '%s' --devnodes '%s' --save\n" $VZ "${VZDEV# }" "${VZNOD# }"
 
</code>
 
 
 
[[Category:HOWTO]]
 

Please note that all contributions to OpenVZ Virtuozzo Containers Wiki may be edited, altered, or removed by other contributors. If you don't want your writing to be edited mercilessly, then don't submit it here.
If you are going to add external links to an article, read the External links policy first!

To edit this page, please answer the question that appears below (more info):

Cancel Editing help (opens in new window)