10 bit pixels convert to RGB
The raw data you get from the camera is nearly linear in the colorspace spanned by the camera CFA filters. The 8-bit/sample monitor you have assumes the image is gamma-compressed, most likely within the sRGB colorspace. These two colorspaces are different, therefore you need to map between the two in some way. Understanding this, lets address each of your issues:


  The RGB image looks is almost completely black.


The maximum 10-bit value is 1023, the maximum 16-bit value is 65535. To Convert 10-bit linear to 16-bit linear you multiply by 65535./1023 and round to nearest integer. Alternatively it might be easier to work with floating point directly, so just divide by 1023 to map your data to the [0,1] range.


  the RGB image looks ... rather green


It is common for the camera sensors to be more sensitive to green, so the green response is higher than red and blue, giving an overall green tint. To get physically correct measurements of the incoming light within a known colorspace (say the ITU-R BT.709 primaries used by your monitor) you need to figure out the color transformation matrix from the camera colorspace to your preferred colorspace. There are different ways to accomplish this: get a color-calibration chart, contact the sensor manufacturer, or measure the exact spectral response using other means (like a monochromator).

That being said, if you don't seek for physically correct measurements but rather just for a good-enough picture, you might skip the above calibration step and instead do only a white-balancing step: find an ought-to-be gray object in the frame and divide each pixel by the RGB of that object, thus cancelling the green tint. This on its own, without a color transform, will not reproduce colors exactly though.


  The overall intensity is very low


This is due to the linear versus gamma discrepancy. You do all your math in linear color space with high bitness, and as a last step, convert it to 8-bit sRGB for display. See sRGB for the exact formula.