How can I remove the checkbox from tableselect form header only?
The checkbox on the header is the Check all one. As the documentation about the tableselect form element says, just set the #js_select property to FALSE. In your case, the code would become the following one.

$form['listings'] = array(
  '#type' =&gt; 'tableselect',
  '#js_select' =&gt; FALSE,
  '#header' =&gt; $header,
  '#options' =&gt; $options,
  '#empty' =&gt; t('No Listing available.'),
);


See also the code of theme_tableselect(), the theme function responsible of rendering tableselect elements.

// Add an empty header or a "Select all" checkbox to provide room for the
// checkboxes/radios in the first table column.
if ($element['#js_select']) {

  // Add a "Select all" checkbox.
  drupal_add_js('misc/tableselect.js');
  array_unshift($header, array(
    'class' =&gt; array(
      'select-all',
    ),
  ));
}
else {

  // Add an empty header when radio buttons are displayed or a "Select all"
  // checkbox is not desired.
  array_unshift($header, '');
}